希赛考试网
首页 > 软考 > 软件设计师

图深度遍历是什么

希赛网 2024-02-04 15:02:37

深度优先搜索算法,又称深度优先遍历,简称DFS。它是一种用于遍历或搜索树或图的算法。具体来说,从根结点开始,首先访问一个未被访问过的子结点,然后继续访问该子结点的子结点,直到子结点都被访问过了,然后回溯到当前访问结点的前一个结点,继续访问其它子结点,一直重复这个过程,直到所有结点都被访问过为止。

图深度遍历和树深度遍历类似,只不过是应用在图上,与广度优先搜索算法(BFS)相对。在图论中,深度优先搜索常被用于生成连通性分析、拓扑排序以及临近点生成的方法中。深度优先搜索策略与广度优先搜索策略不同,它偏向于使用递归以及栈结构实现,而广度优先搜索策略使用的是队列结构。

从算法实现的角度来看,深度优先搜索算法有两种实现方法,递归和非递归(栈方式)。

下面我们就来具体讲解一下深度优先搜索算法的思路和实现。

一、深度优先搜索算法遍历方法

1.递归方式

深度优先遍历递归算法的思路:通过递归实现整张图的遍历,具体解释如下:

先构造一个visited数组用于记录所有顶点的访问情况,初始化为False;

从起始顶点开始,先将该顶点的visited值赋为True,然后将该顶点加入到已访问的顶点集合visited中;

对于起始顶点的所有未被访问过的邻接点,依次递归调用DFS,直到没有未被访问的邻接点为止;

若存在从起始顶点可达的未被访问的顶点,按照与第二步类似的方式进行访问;

2.非递归方式

深度优先遍历非递归算法的思路:通过栈的数据结构,实现图的深度优先遍历。具体解释如下:

在遍历过程中,首先选定一个顶点,并将该顶点压入一个栈中;

然后,若该顶点有未被访问的邻接点,则选择其中的一个,进行访问,并将该顶点压入栈中,否则,将该顶点从栈中弹出;

以上两个步骤重复执行,直到栈为空。

二、深度优先搜索实现的注意事项

在深度优先搜索算法的实现过程中,需要注意以下几个问题:

1. 图的连通性

深度优先搜索算法必须考虑到图的连通性,否则可能会导致没有访问到某些点。

2. 采用递归方式时的Python代码实现

递归方式相比于非递归方式,其Python代码实现相对简单。具体如下:

```python

def dfs(graph, start, visited=None):

if visited is None:

visited = set()

visited.add(start)

for next_node in graph[start] - visited:

dfs(graph, next_node, visited)

return visited

```

3. 采用非递归(栈)方式时的Python代码实现

深度优先遍历非递归算法需要使用栈数据结构实现,采用Python语言实现的代码如下:

```python

def dfs_nonrecursive(graph, start):

stack, seen = [start], set()

while stack:

vertex = stack.pop()

if vertex not in seen:

seen.add(vertex)

stack.extend(graph[vertex] - seen)

return seen

```

微信扫一扫,领取最新备考资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考报考咨询

微信扫一扫,定制学习计划