【大话数据结构C语言】44 图的广度优先遍历

举报
CodeAllen 发表于 2021/10/29 23:03:36 2021/10/29
【摘要】 欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取资源 程序员技术交流①群:736386324 ,程序员技术交流②群:371394777     广度优先遍历(BreadthFirstSearch),又称为广度优先搜索,简称BFS。   如果以之前...

欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取资源
程序员技术交流①群:736386324 ,程序员技术交流②群:371394777    

广度优先遍历(BreadthFirstSearch)又称为广度优先搜索,简称BFS。
 
如果以之前我们找钥匙的例子来讲,运用深度优先遍历意味着要先彻底查找完一个房间再开始另一个房间的搜索。
但我们知道,钥匙放在沙发地下等犄角旮旯的可能性极低,因此我们运用新的方案: 先看看钥匙是否放在各个房间的显眼位置,如果没有,再看看各个房间的抽屉有没有。这样逐步扩大查找的范围的方式我们称为广度优先遍历。
 
 
将下图左侧图变形,变形原则是A放置在最上边第一层,让其与它右边的顶点B F为第二层,再让与B F有边的顶点C I G E为第三层,再将这四个顶点有边的D H放在第四层,就如下方右侧图
两个图在视觉上感觉发生了变化,其实顶点和边的关系还是完全相同的

 
 
 
要实现对图的广度遍历,我们可以利用队列来实现

 
BTSTraverse.c

   
  1. // 邻接矩阵的广度遍历算法
  2. void BFSTraverse(MGraph G)
  3. {
  4.     int i, j;
  5.     Queue Q;
  6.     
  7.     for( i=0; i < G.numVertexes; i++ )
  8.     {
  9.         visited[i] = FALSE;
  10.     }
  11.     
  12.     initQueue( &Q );
  13.     
  14.     for( i=0; i < G.numVertexes; i++ )
  15.     {
  16.         if( !visited[i] )
  17.         {
  18.             printf("%c ", G.vex[i]);
  19.             visited[i] = TRUE;
  20.             EnQueue(&Q, i);
  21.             
  22.             while( !QueueEmpty(Q) )
  23.             {
  24.                 DeQueue(&Q, &i);
  25.                 for( j=0; j < G.numVertexes; j++ )
  26.                 {
  27.                     if( G.art[i][j]==1 && !visited[j] )
  28.                     {
  29.                         printf("%c ", G.vex[j]);
  30.                         visited[j] = TRUE;
  31.                         EnQueue(&Q, j);
  32.                     }
  33.                 }
  34.             }
  35.         }
  36.     }
  37. }

文章来源: allen5g.blog.csdn.net,作者:CodeAllen的博客,版权归原作者所有,如需转载,请联系作者。

原文链接:allen5g.blog.csdn.net/article/details/116573368

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。