• 浅谈图的广度优先遍历


    一、广度优先遍历

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

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

    二、实现过程

    广度优先搜索过程如下:

    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;
    }
  • 相关阅读:
    前端之CSS盒模型介绍
    前端之CSS列表及背景类属性
    前端之CSS字体和文本类属性
    流程控制语句
    前端之CSS语法及选择器
    前端之CSS创建的样式
    前端之HTML语法及常用标签
    前端之HTML样式
    网页制作之前端简介
    jQuery(一)、核心
  • 原文地址:https://www.cnblogs.com/OctoptusLian/p/8277247.html
Copyright © 2020-2023  润新知