算法系列—图的深度优先搜索(递归)/C++

本文介绍了图的深度优先搜索算法(DFS),重点在于理解DFS的思想及C++实现。从某顶点开始,访问其邻接顶点,直至所有邻接顶点都被访问,再回退并继续搜索,直至所有顶点都被访问。DFS在无环连通图中,每条边会被访问两次。文章提供了基于邻接表的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

图的遍历是指从图的某一个顶点出发,按照某种方法沿着边对图中的顶点全部访问一次。

ps:树是一幅无环连通图。互不相连的树组成的集合 称为森林。

连通图的生成树是它的一幅子图,它含有图中所有顶点且是一棵树。

当且仅当一幅含有V个结点的图G满足下列五个条件之一时,他就是一棵树:

1 G有V-1条边且不含有环。

2 G有V-1条边且是连通的。

3 G是连通的,且删除任意一条边都会使它不再连通。

4 G是无环图,但添加任意一条边都会产生一条环。

5 G中的任意一对顶点之间仅存在一条简单路径。


深度优先搜索(DFS)的思想:

以图的某个顶点V开始,访问V的邻接顶点w1,再访问w1的邻接顶点n1,直到当前所访问的顶点的所有邻接顶点都被访问过了,然后回退到最近被访问的顶点,如果该顶点还有未被访问的点,则从改点继续搜索,否则继续回退,直到回退到v。

深度优先搜索中每条边都会被访问两次,且第二次访问时总会发现这个顶点已经被访问过。


此处使用邻接表表示图,

C++代码实现如下:

//DFS.cpp
//有向图
#include <iostream>
#include <list>
using namespace std;

class Graph
{
	int count = 0;//顶点数
	list<int> *adj;	//邻接表
	void DFSUtil(int v, bool visited[]);
public:
	void addEdge(int v, int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值