(1)访问顶点v;
(2)依次访问v的各个未被访问的邻接点v1,v2,v3……,vk;
(3)分别从v1,v2,v3……,vk出发依次访问他们未被访问的邻接点,并使“先被访问顶点的邻接点”先于“后被访问的邻接点”被访问。直至图中所有与顶点v有路径相通的顶点都被访问到。
1.初始化队列Q;
2.访问顶点v;visited[v]=true;顶点v入队列Q;
3.while(队列Q非空)
3.1 v=队列Q的队头元素出队;
3.2 w=顶点v的第一个邻接点;
3.3while(w存在)
3.3.1 如果w未被访问,则访问顶点w;visited[w]=1;顶点w入队;
3.3.2 w=顶点v的下一个邻接点
- template<class T>
- void MGraph
::BFSTraverse(int v){ - bool visited[vertexNum]=false;
- queue<int> Q;
- int w,i=0,count=0;
-
- cout<
- visited[v]=true;
- ++count;
- Q.push(v);
-
- if(count==vertexNum){
- return;
- }
- while(!Q.empty()){
- v=Q.front();//队头元素出队
- Q.pop();
- for(i=0;i
- if(arc[v][i]&&!visited[i]){//w未被访问
- w=i;
- cout<
- visited[w]=true;
- ++count;
- Q.push(w);
- }
- }
- }
-
- }
- template <class T>
- void ALGraph
::BFSTraverse(int v){ - bool visited[vertexNum]=false;
- queue<int> Q;
- int w,i=0,count=0;
-
- cout<
- visited[v]=true;
- ++count;
- Q.push(v);
-
- if(count==vertexNum){
- return;
- }
- while(!Q.empty()){
- v=Q.front();//队头元素出队
- Q.pop();
- struct ArcNode *p=adjList[v].firstEdge;
-
- while(p){
- if(!visited[p->adjvex]){
- w=p->adjvex;
-
-
相关阅读:
并发编程 ---为何要线程池化
优秀前端(基本素质、代码规范和开发技巧)
CVPR2020:Seeing Through Fog Without Seeing Fog
【前端验证】通关寄存器与ral_model —— 将寄存器描述由excel格式转为xml格式的脚本
大学生书店系统
UML List 集合(超详解)
免费GIF动图制作,简简单单一招搞定
Java 大厂面试必刷题 Day1:何为面向对象编程的思想?面向对象三大特征是什么?
2022年12月STEMAC++中级组编程题
实现一个 SEO 友好的响应式多语言官网 (Vite-SSG + Vuetify3) 我的踩坑之旅
-
原文地址:https://blog.csdn.net/Hsianus/article/details/134487498