图的遍历BFS
图的遍历BFS
- 广度优先遍历
- 深度优先遍历
可以进行标记
树的广度优先遍历,我们用了辅助的队列
bool visited[MAX_VERTEX_NUM] //访问标记数组 //广度优先遍历 void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G visit(v); //访问初始顶点v visited[v] = TRUE; //对v做已访问标记 Enqueue(Q,v); //顶点v入队列Q while(!isEmpty(Q)){ DeQueue(Q,v); //顶点v出队列 for(w=FirstNeighbor(G,v);w>=0; w=NextNeighbor(G,v.w)) if(!visited[w]){ //w为v的尚未访问的邻接顶点 visit(w); //访问顶点w visited[w]=TRUE;//对w做已访问标记 EnQueue(Q,w); //顶点w入队列 } } }
存在问题:如果是非连通图,则无法遍历完所有结点
解决:判断数组里还有没有false的元素
void BFSTraverse(Graph G){ for(i=0;i<G.vexnum;++i) visited[i] = FALSE; InitQueue(Q); for(i=0;i<G.vexnum;++i){ if(!visited[i]) BFS(G,i); } }
对于无向图来说,调用bfs函数的次数=连通分量数
复杂度分析
广度优先生成树
广度优先生成森林
本文作者:Jev_0987
本文链接:https://www.cnblogs.com/jev-0987/p/13213415.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步