大话数据结构C语言44 图的广度优先遍历
Posted 是CodeAllen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话数据结构C语言44 图的广度优先遍历相关的知识,希望对你有一定的参考价值。
欢迎关注我的公众号是【CodeAllen】,关注回复【1024】获取资源
程序员技术交流①群:736386324 ,程序员技术交流②群:371394777
广度优先遍历(BreadthFirstSearch),又称为广度优先搜索,简称BFS。
如果以之前我们找钥匙的例子来讲,运用深度优先遍历意味着要先彻底查找完一个房间再开始另一个房间的搜索。
但我们知道,钥匙放在沙发地下等犄角旮旯的可能性极低,因此我们运用新的方案:
先看看钥匙是否放在各个房间的显眼位置,如果没有,再看看各个房间的抽屉有没有。这样逐步扩大查找的范围的方式我们称为广度优先遍历。
将下图左侧图变形,变形原则是A放置在最上边第一层,让其与它右边的顶点B F为第二层,再让与B F有边的顶点C I G E为第三层,再将这四个顶点有边的D H放在第四层,就如下方右侧图
两个图在视觉上感觉发生了变化,其实顶点和边的关系还是完全相同的
要实现对图的广度遍历,我们可以利用队列来实现
BTSTraverse.c
// 邻接矩阵的广度遍历算法
void BFSTraverse(MGraph G)
{
int i, j;
Queue Q;
for( i=0; i < G.numVertexes; i++ )
{
visited[i] = FALSE;
}
initQueue( &Q );
for( i=0; i < G.numVertexes; i++ )
{
if( !visited[i] )
{
printf("%c ", G.vex[i]);
visited[i] = TRUE;
EnQueue(&Q, i);
while( !QueueEmpty(Q) )
{
DeQueue(&Q, &i);
for( j=0; j < G.numVertexes; j++ )
{
if( G.art[i][j]==1 && !visited[j] )
{
printf("%c ", G.vex[j]);
visited[j] = TRUE;
EnQueue(&Q, j);
}
}
}
}
}
}
以上是关于大话数据结构C语言44 图的广度优先遍历的主要内容,如果未能解决你的问题,请参考以下文章
数据结构C语言版 图的广度优先遍历和深度优先遍历 急急急 会查重