Day10 图的广度优先遍历
Posted cc的心理活动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Day10 图的广度优先遍历相关的知识,希望对你有一定的参考价值。
图的广度优先遍历具有广泛的应用,在bfs,即广度优先遍历算法中,用户更多的关注当前节点的相邻节点,例如,在如下的图中
若从A节点开始遍历,则遍历顺序是A->B->C->F->D->E
即每次优先遍历与根节点相邻的节点,先来先遍历,因此需要用到队列。
在c++ stl中,我们可以使用queue数据结构来表示队列,需要用到头文件:
#include<queue>
queue<int> Q;//定义一个队列Q
Q.push(0);//入队
Q.pop();//将队头元素删除
int p=Q.front();//将对头元素赋值给p
bool flag=Q.empty();
-
将起点入队 -
判定队列是否为空循环非空条件,出队对头元素进行遍历,同时对未遍历过的首条边和其他邻边的弧头入队
代码:
void BFS(Graph G) {
queue<int> Q;
Q.push(1);
for (int i = 1; i <= G.vexNum; i++)
visited[i] = false;
int i, j,t;
while (!Q.empty()) {
t = Q.front();
Q.pop();
visited[t] = true;
cout << G.vexlist[t].name << ' ';
edgeNode *w;
for (w = G.vexlist[t].firstedge; w != NULL; w = w->nextEdge) {
if (visited[w->head] == false) {
Q.push(w->head);
}
}
}
}
以上是关于Day10 图的广度优先遍历的主要内容,如果未能解决你的问题,请参考以下文章
图的深度优先遍历DFS和广度优先遍历BFS(邻接矩阵存储)超详细完整代码进阶版