【小算法】图的遍历之深度优先(DFS)

本文介绍了图的深度优先遍历(DFS)算法,包括图的表示方法——临接矩阵和临接表,重点讲解了DFS的算法思路,并通过一个具体的图例解释了遍历过程。最后,提供了Python代码示例来实现DFS。
摘要由CSDN通过智能技术生成

谈到算法,图的操作是避免不了。

而我们一般谈到图时,又必定会谈到图的遍历。

图的遍历通常有 2 种,深度优先(DFS) 和广度优先(BFS)。

本篇博文讲解深度优先(DFS)。

图的表示

图有两种表示方式

在这里插入图片描述

1. 临接矩阵

在这里插入图片描述

其实就是一个权重矩阵,用 1 代表两个结点有连接,0 表示没有连接,这样的表示方式通俗易懂,特别适合稠密图,也就是大多数结点是亮亮连接的情况。

2. 临接表

在这里插入图片描述

用一个数组储存所有的顶点的信息,每个顶点又用一个链表或者是数组存放与它相临的结点的信息。

这样的表示方式特别适合稀疏图,也就是比较少的结点之间相互有连接。

本文示例代码用 Python 表示,为了简便,用临接表这种形式表示

DFS 算法思路

其实 DFS 的思路非常简单。

如果你哪天钱包忘记在哪里了,以 DFS 的思路就是,一个房间一个房间找。

先选定一个房间,大致扫一眼,发现没有。

然后,就选择房间里面的办公桌,桌子上没有的话,再去桌子上的柜子里面找。

如果桌子没有,就去床上着。

如果翻遍了所有的角落,也没有那就换个房间。

DFS 图例

在这里插入图片描述

上面是一张图,如果要遍历图中所有的结点,又不重复。

可以先选择一个顶点作为根结点,然后沿着路径一条一条遍历下去。

关键词是递归,因为递归需要终止条件,所以另外需要用一个数组记录已经访问过的结点,当一个结点它的临结点都已经访问时,它就需要回溯,这样能避免重复及陷入死循环。

我们首先选择 A.

在这里插入图片描述

A 有 2 个临接结点 B 和 C,我们选择先从 B 出发,所以此时路径是

A--->B

在这里插入图片描述

现在在 B 结点位置,B 有 3 个临接结点,C、D、F,按照优先往右边走的原则,我们选择 F,所以此时的路径是

A--->B--->F

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

frank909

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

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

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

打赏作者

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

抵扣说明:

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

余额充值