# 求abc和def的全排列 # 全排列就是回溯, 求最短路径也是DFS
- 广度优先BFS是栈
- 深度优先DFS是队列
以下来源:python中的 DFS 与 BFS
Depth-First和Breath-First搜索来实现下面强调的目标:
-
查找所有的连接到目标顶点的组件中的全部顶点
-
返回两个顶点之间的所有可行的路径
-
在BFS的情况下,返回最短路径(长度为路径边的数目)
DFS
- 标记当前节点为已经访问过。
- 探索每个未包含在已访问节点集合的相邻节点
非递归
def dfs(graph, start):
visited, stack = set(), [start]
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.add(vertex)
stack.extend(graph[vertex] - visited)
return visited
dfs(graph, 'A') # {'E', 'D', 'F', 'A', 'C', 'B'}
递归
def dfs(graph, start, visited=None):
if visited is None:
visited = set()
visited.add(start)
for it in graph[start] - visited:
dfs(graph, it, visited)
return visited
dfs(graph, 'C') # {'E', 'D', 'F', 'A', 'C', 'B'}
参考:
解救小哈——DFS算法举例 (最短路径)