zoukankan      html  css  js  c++  java
  • 浅谈图的广度优先遍历

    一、广度优先遍历

    上次我们浅谈了图的深度优先遍历,接下来我们使用广度优先搜索来遍历这个图:

    这五个顶点被访问的顺序如下图所示:

    二、实现过程

    广度优先搜索过程如下:

    1. 首先以一个未被访问过的顶点作为起始顶点,比如以1号顶点为起点。
    2. 将1号顶点放入到队列中,然后将与1号顶点相邻的未访问过的顶点,即2号、3号和5号顶点依次放入到队列中。
    3. 接下来再将2号顶点相邻的未访问过的4号顶点放入到队列中。
    4. 到此所有顶点都被访问过,遍历结束。

    广度优先遍历的主要思想:

    1. 首先以一个未被访问过的顶点作为起始顶点,访问其所有相邻的顶点;
    2. 然后对每个相邻的顶点,再访问它们相邻的未被访问过的顶点;
    3. 直到所有顶点都被访问过,遍历结束。

    三、完整代码如下

    #include<stdio.h>
    int main()
    {
        int i,j,n,m,a,b,cur,book[101]={0},e[101][101];
        int que[10001],head,tail;
        scanf("%d %d",&n,&m);
        //初始化二维矩阵
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                if(i==j) e[i][j]=0;
                else e[i][j]=99999999;  //表示正无穷
                
        //读入顶点之间的边
        for(i=1;i<=m;i++)
        {
            scanf("%d %d",&a,&b);
            e[a][b]=1;
            e[b][a]=1; 
         } 
         
        //队列初始化
        head=1;
        tail=1;
        
        //从1号顶点出发,将1号顶点加入队列
        que[tail]=1;
        tail++;
        book[1]=1;  //标记1号顶点已访问 
        
        //当队列不为空时循环 
        while(head<tail && tail<=n)
        {
            cur=que[head];  //当前正在访问的顶点编号
            for(i=1;i<=n;i++)  //从1~n依次尝试
            {
                //判断从顶点cur到顶点i是否有边,并且顶点i没有被访问过,则将顶点i入队
                if(e[cur][i]==1 && book[i]==0){
                    que[tail]=i;
                    tail++;
                    book[i]=1;  //标记顶点i已访问                 
                }
                //如果tail大于n,则表明所有顶点都已经被访问过
                if(tail>n)
                {
                    break;
                 } 
             } 
            head++;  //当一个顶点扩展结束后,执行head++才能继续往下扩展 
         } 
        
        for(i=1;i<tail;i++)
            printf("%d ",que[i]);
            
        getchar();getchar();
        return 0;
    }
  • 相关阅读:
    javascript UniqueID属性
    java中接口的定义与实现
    HPUX平台经常使用命令列举
    Vim简明教程【CoolShell】
    ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)
    void及void指针含义的深刻解析
    IE无法打开internet网站已终止操作的解决的方法
    Ubuntu下安装eclipse
    codeforces 444 C. DZY Loves Colors(线段树)
    Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/8277247.html
Copyright © 2011-2022 走看看