深度寻路算法-DFS(深度寻路算法)
导读:深度寻路算法(Depth-First Search,DFS)是一种用于遍历或搜索图或树的算法。它从一个起始节点开始,沿着一条路径尽可能深地访问节点,直到到达一个无法访问的节点,然后回溯到最近的一个还未访问完的节点,继续进行深度优先搜索。深度...
深度寻路算法(Depth-First Search,DFS)是一种用于遍历或搜索图或树的算法。它从一个起始节点开始,沿着一条路径尽可能深地访问节点,直到到达一个无法访问的节点,然后回溯到最近的一个还未访问完的节点,继续进行深度优先搜索。深度寻路算法可以用递归和非递归两种方式实现。
- 递归实现
递归实现深度寻路算法比较简单,代码如下:
def dfs_recursive(graph, start, visited):
visited.add(start)
print(start, end=' ')
for neighbor in graph[start]:
if neighbor not in visited:
dfs_recursive(graph, neighbor, visited)
其中,graph
是一个字典,表示图的邻接表;start
是起始节点;visited
是一个集合,表示已经访问过的节点。
- 非递归实现
非递归实现深度寻路算法需要使用栈来保存节点,代码如下:
def dfs_iterative(graph, start):
visited = set()
stack = [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
print(vertex, end=' ')
stack.extend(reversed(graph[vertex]))
其中,graph
是一个字典,表示图的邻接表;start
是起始节点。
- 生成器实现
生成器实现深度寻路算法可以更加简洁地表示算法的本质,代码如下:
def dfs_generator(graph, start, visited=set()):
visited.add(start)
yield start
for neighbor in graph[start] - visited:
yield from dfs_generator(graph, neighbor, visited)
其中,graph
是一个字典,表示图的邻接表;start
是起始节点;visited
是一个集合,表示已经访问过的节点。
以上三种实现方式都是正确的深度寻路算法,具体选择哪种方式取决于具体场景和个人偏好。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 深度寻路算法-DFS(深度寻路算法)
本文地址: https://pptw.com/jishu/365.html