当前位置:网站首页>图的遍历 深度优先DFS 广度优先BFS
图的遍历 深度优先DFS 广度优先BFS
2022-04-22 14:12:00 【借点头发吧】
深度优先搜索
类似于树的前序遍历
从某顶点v出发,依次从v的邻接点出发深度优先遍历

从V0出发,选择邻接点V1,从V1接着出发,以此类推访问V3、V7、V4。V4访问结束后由于其邻接点都已访问,则回到V7,同理回到V3、V1、V0,从V0的另外一个邻接点出发访问V2、直到V5、V6.
为便于区别顶点是否已经访问,利用访问标志数组。
已经访问过的标志1
以邻接表 表示
#define False 0
#define True 1
void ALGraph::DFStraverse( ) //深度优先搜索遍历以邻接表表示的图G
{
int v;
for(v=0; v<vertexNum; v++)
visited[v]=False; //标志向量初始化,visited数组已在类中数据成员部分定义
for(v=0; v<vertexNum; v++)
if(! visited[v])DFS(v);
}//DFS
void ALGraph::DFS(int v) //从第v个顶点出发深度优先遍历图G
{
EdgeNode *p; int w;
Visit(v);
visited[v]=True; //访问第v个顶点,并把访问标志置True
for(p=adjlist[v].firstedge; p; p=p->next)
{
w=p->adjvertex;
if(! visited[w])DFS(w); //对v尚未访问的邻接顶点w递归调用DFS
}
}
用二维数组表示,查找每个顶点的邻接点所需要时间O(n²),n为顶点数。用邻接表表示,查找顶点所需时间O(e),e为边/弧数。所以时间复杂度是O(n+e)
广度优先搜索
类似于树的按层次遍历
以v为起始点,由近至远,依次访问和v有路径相通且路径长度为1,2, …的顶点。
上图以BFS:v0→v1→v2→v3→v4→v5→v6→v7
在遍历的过程中也需要一个访问标志数组。
为了顺次访问路径长度为2,3, …的顶点,需附设队列以存储已被访问的路径长度为1,2, …的顶点。
以邻接表为存储结构
void ALGraph ::BFS(int v)
{
//从v出发按广度优先搜索遍历图G;使用辅助队列Q和访问标志数组visited
EdgeNode *p;
int u, w;
SeqQueue Q;
for(v=0; v<vertexNum; v++)
visited[v]=False; //标志向量初始化
Visit(v); //访问v,注意Visit函数和visited数组的区别
visited[v]=True; //把访问标志置True
Q.En_Queue(v); //v入队列
while(! Q. Empty_Queue())
{
Q.De_Queue(u); //出队列
for(p=adjlist[u].firstedge; p; p=p->next)
{
w=p->adjvertex;
if(! visited[w])
{
Visit(w);
visited[w]=True;
Q.En_Queue(w); //u的尚未访问的邻接顶点w入队列Q
}
}
}
} // BFS
以邻接矩阵为存储结构
void MGraph ::BFStraverse( )
{
//广度优先搜索遍历图G
int v;
for(v=0; v<vertexNum; v++)
visited[v]=False; //标志向量初始化
for(v=0; v<vertexNum; v++)
if(! visited[v])BFS(v); //v未访问过,从v开始BFS
}
void MGraph ::BFS(int v)
{
//以v为出发点,对图G进行BFS
int i, j;
SeqQueue Q;
for(v=0; v<vertexNum; v++) visited[v]=False; //标志向量初始化
Visit(v); //访问
visited[v]=True;
Q.En_Queue(v);
while(! Q.Empty_Queue())
{
Q.De_Queue(i);
for(j=0; j<vertexNum; j++)
//依次搜索i的邻接点j
if(arcs[i][j]= =1 && ! visited[j]) //若j未访问
{
Visit(j);
visited[j]=True;
Q.En_Queue(j); //j入队列
}
}
}//BFS
判定一个无向图是否为连通图/几个连通分量


(a)是一个非连通图,用邻接表存储调用两次DFS(分别从V0、V2出发),得到(b)两个连通分量。
版权声明
本文为[借点头发吧]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_47866171/article/details/107261298
边栏推荐
- Actual combat of wechat applet mall project (Part 6: commodity search)
- C Primer Plus---程序清单13.2 reduto.c
- Leetcode-386 dictionary order
- Move blog to CSDN
- Shiro's cache management
- A solution to the problem of buying and selling stocks by force deduction
- 【机器人学习】移动机器人里程计学习记录
- LeetCode-3 无重复字符的最长子串
- 关于局域网特性的三个要素简述
- 多线程进阶
猜你喜欢

获取数据库中数值时,数据库有值,却为空??

一个解法解决所有力扣买卖股票问题

An error is reported when reading the attribute value of the object through the variable storage key value in TS (TS: 7053)

2022 examination questions and simulation examination of operation certificate for safety management personnel of hazardous chemical business units

P2B论文复现——点云学习记录

Method of running uniapp to applet simulator - uniapp opens wechat developer tool preview support - hbuilderx

CRM系统改善客户体验的方法

Osgearth configuring Map Resources

2022化工自动化控制仪表考试练习题模拟考试平台操作
![Error reported by uniapp to wechat developer tool - [wrong content of app.json file] JSON: the sitemap.json file corresponding to [](/img/3b/2f371eab7d2f9e976dcd4612a19518.png)
Error reported by uniapp to wechat developer tool - [wrong content of app.json file] JSON: the sitemap.json file corresponding to ["sitemaplocation"] was not found
随机推荐
redis连接工具无法连上docker中redis
plsql developer文件编码格式设置
Development notes of raspberry pie (12): start Advantech industrial control raspberry pie uno-220 Kit (I): introduction and operation of the system
处理高并发问题思路
双指针||有序数组去重 排序链表移除元素 26、27、83
360 digital department and other companies were selected as the first batch of data security management capability certification companies of ICT Institute
【鲲鹏迁移及实践帖子汇总】第一弹~~
一个解法解决所有力扣买卖股票问题
樹莓派開發筆記(十二):入手研華ADVANTECH工控樹莓派UNO-220套件(一):介紹和運行系統
uniapp运行到小程序模拟器的方法 - uniapp开启微信开发者工具预览支持 - HBuilderX
How to use openfeign to call the third-party interface
关于QPS、TPS、并发用户数及吞吐量浅谈
2022危险化学品经营单位安全管理人员操作证考试题及模拟考试
动规初解||最大子序和 最长上升子序列53、128
微信小程序商城项目实战(第六篇:商品搜索)
What is adapter mode?
Where do embedded software bugs come from and how do they go
Huawei cloud media Zha Yong: Huawei cloud's technical practice in the field of video AI transcoding
Mysql数据库转存sql文件
Redis batch delete data (wildcard)