当前位置: 首页 > news >正文

【数据结构】图的广度优先遍历

一.广度优先遍历的基本思想

(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<T>::BFSTraverse(int v){bool visited[vertexNum]=false;queue<int> Q;int w,i=0,count=0;cout<<vertex[v]<<endl;visited[v]=true;++count;Q.push(v);if(count==vertexNum){return;}while(!Q.empty()){v=Q.front();//队头元素出队Q.pop();for(i=0;i<vertexNum;i++){if(arc[v][i]&&!visited[i]){//w未被访问w=i;cout<<vertex[w]<<endl;visited[w]=true;++count;Q.push(w);}}}}
template <class T>
void ALGraph<T>::BFSTraverse(int v){bool visited[vertexNum]=false;queue<int> Q;int w,i=0,count=0;cout<<adjList[v].vertex<<endl;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;cout<<adjList[w].vertex<<endl;visited[w]=true;++count;Q.push(w);}else{p=p->next;}}}
}

四.总结

广度优先:确定起始节点后,全部邻接点(分支)同时开始遍历;

深度优先:先从一个邻接点(分支)开始遍历,直至该分支全部遍历完成,再遍历按顺序的下一个分支。

http://www.lryc.cn/news/235272.html

相关文章:

  • AM@函数展开成幂级数@间接法@常用麦克劳林幂级数展开公式
  • LeetCode994.腐烂的橘子
  • 【开源】基于Vue和SpringBoot的康复中心管理系统
  • 【音视频基础】AVI文件格式
  • 图书馆整理I(从尾到头打印列表),剑指offer,力扣
  • C++编写的多线程自动爬虫程序
  • SMB信息泄露的利用
  • QT自定义信号,信号emit,信号参数注册
  • 06.webpack性能优化--构建速度
  • 11-15 周三 softmax 回归学习
  • React新手必懂的知识点
  • es为什么这么快
  • Pandas分组聚合_Python数据分析与可视化
  • VMware17虚拟机Linux安装教程(详解附图,带VMware Workstation 17 Pro安装)
  • 基于SDN技术构建多平面业务承载网络
  • 关于卓越服务的调研报告
  • ubuntu22.04换源
  • 03. Python中的语句
  • Linux CentOS7 添加网卡
  • 2311rust,到54版本更新
  • 【linux】补充:高效处理文本的命令学习(tr、uniq、sort、cut)
  • Redis篇---第七篇
  • Shell脚本:Linux Shell脚本学习指南(第一部分Shell基础)一
  • 长短期记忆(LSTM)与RNN的比较:突破性的序列训练技术
  • Swift 如何打造兼容新老系统的字符串分割(split)方法
  • JVM面试必备
  • 战神传奇【我本沉默精修版】win服务端+双端+充值后台+架设教程
  • 安卓手机投屏到电视,跨品牌、跨地域同样可以实现!
  • python变量名解析总结
  • 端口号大揭秘:网络世界的“门牌号”有多牛?