📅  最后修改于: 2023-12-03 15:34:12.909000             🧑  作者: Mango
深度优先搜索(Depth-First Search,DFS)是一种搜索算法,它是从根节点开始探索,一直到某个分支到达叶节点为止,然后回溯到该节点的父节点继续搜索。DFS 可以用递归或栈的方式实现。
下面是使用递归实现 DFS 的 Python 代码:
def dfs_recursive(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
print(start, end=' ')
for neighbor in graph[start] - visited:
dfs_recursive(graph, neighbor, visited)
其中,graph
表示图,start
表示开始节点,visited
表示已经访问过的节点(默认为 None
)。首先把 start
加入 visited
集合中,然后打印 start
,接着对 start
的邻居节点执行递归操作(如果邻居节点没有被访问过)。
下面是使用栈实现 DFS 的 Python 代码:
def dfs_stack(graph, start):
visited, stack = set(), [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
print(vertex, end=' ')
stack.extend(graph[vertex] - visited)
其中,graph
表示图,start
表示开始节点。首先创建两个集合 visited
和栈 stack
,把 start
加入栈中,然后循环执行以下操作:弹出栈顶节点 vertex
,如果 vertex
没有被访问过,则把它加入 visited
集合并打印,接着把 vertex
的邻居节点加入栈中(如果邻居节点没有被访问过)。
DFS 可以用于解决一些图论问题,例如:
Python 实现 DFS 有两种方式:递归和栈。递归实现简单,但可能会因为递归层数过深而导致栈溢出;栈实现需要手动维护一个栈,但比递归实现更节省内存。DFS 可以应用于一些图论问题,是算法学习中必不可少的算法之一。