06-6.3.3 图的深度优先遍历

👋 Hi, I’m @Beast Cheng
👀 I’m interested in photography, hiking, landscape…
🌱 I’m currently learning python, javascript, kotlin…
📫 How to reach me --> 458290771@qq.com


喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

回顾树的先根遍历

void PreOrder(TreeNode *R)
{
	if (R != NULL)
	{
		visit(R);  // 访问根结点
		while (R还有下一个子树T)
			PreOder(T);  // 先根遍历下一棵子树
	}
}

图的深度优先遍历-代码实现

bool visited[MAX_VERTEX_NUM];  // 访问标记数组

void DFS (Graph G, int v)  // 从顶点v出发,深度优先遍历图G
{
	visit(v);  // 访问顶点v
	visited[v] = TRUE;  // 设已访问标记
	for (w = FirstNeighbor(G, v); w >= 0; w = NextNeighbor(G, v, w))
	if (!visited[w])  // w为v的尚未访问的邻接结点
	{
		DFS(G, w);
	}  // if
}

如果是非连通图,则无法遍历所有结点
解决方法类似:完成遍历之后,可以再进行一次扫描,如果发现有结点仍然是false,那就说明与之对应的结点是没有被访问过的
也就是要加上如下代码之后再进行深度优先遍历

void DFSTraverse(Graph G)  // 对图G进行深度优先遍历
{
	for(v = 0; v < G.vexnum; ++v)
		visited[v] = FALSE;  // 初始化已访问标记数据
	for(v = 0; v < G.vexnum; ++v)  // 本代码中是从v=0开始遍历
		if(!visited[v])
			DFS(G, v);
}

深度优先遍历序列

同一个图的邻接矩阵表示方式唯一,因此深度深度优先遍历序列唯一
同一个图的邻接表表示方式不唯一,因此深度优先遍历序列不唯一

此外,还有深度优先生成树深度优先生成森林

图的遍历和图的连通性

无向图进行BFS/DFS遍历
调用BFS/DFS函数的次数 = 连通分量数

对于连通图只需要调用一次BFS/DFS


有向图进行BFS/DFS遍历
调用BFS/DFS函数的次数要具体分析

如果起始顶点到其他各顶点都有路径,则只需调用一次BFS/DFS函数


对于强连通图,从任一结点出发都只需调用一次BFS/DFS

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beast Cheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值