第11周项目3-图遍历算法实现(广度优先BFS)

  1. /* 
  2. *Copyright(c)2017,烟台大学计算机学院 
  3. *All right reserved. 
  4. *文件名:sk.cpp btree.h btree.cpp 
  5. *作者:盛凯 
  6. *完成日期:2017年12月14日 
  7. *版本号:v1.0 
  8. * 
  9. *问题描述:图遍历算法实现
  10. *输入描述:无 

  1. *程序输出:见运行结果
  2. sk.cpp:

  3. #include <stdio.h>
    #include <malloc.h>
    #include “graph.h”

    void BFS(ALGraph *G, int v)
    {
        ArcNode *p;
        int w,i;
        int queue[MAXV],front=0,rear=0; //定义循环队列
        int visited[MAXV];     //定义存放节点的访问标志的数组
        for (i=0; i<G->n; i++) visited[i]=0; //访问标志数组初始化
        printf(“%2d”,v);            //输出被访问顶点的编号
        visited[v]=1;                       //置已访问标记
        rear=(rear+1)%MAXV;
        queue[rear]=v;              //v进队
        while (front!=rear)         //若队列不空时循环
        {
            front=(front+1)%MAXV;
            w=queue[front];             //出队并赋给w
            p=G->adjlist[w].firstarc;   //找w的第一个的邻接点
            while (p!=NULL)
            {
                if (visited[p->adjvex]==0)
                {
                    printf(“%2d”,p->adjvex); //访问之
                    visited[p->adjvex]=1;
                    rear=(rear+1)%MAXV; //该顶点进队
                    queue[rear]=p->adjvex;
                }
                p=p->nextarc;       //找下一个邻接顶点
            }
        }
        printf(“\n”);
    }

    int main()
    {
        ALGraph *G;
        int A[5][5]=
        {
            {0,1,0,1,0},
            {1,0,1,0,0},
            {0,1,0,1,1},
            {1,0,1,0,1},
            {0,0,1,1,0}
        };
        ArrayToList(A[0], 5, G);

        printf(” 由2开始广度遍历:”);
        BFS(G, 2);

        printf(” 由0开始广度遍历:”);
        BFS(G, 0);
        return 0;
    }

  4. 程序运行结果如图所示:
    《第11周项目3-图遍历算法实现(广度优先BFS)》
  5. 反思总结:
    广度优先占用内存较多但是速度较快。
    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/qq_40043365/article/details/78800027
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞