【数据结构】DFS与BFS

# 求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算法举例 (最短路径)

图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

猜你喜欢

转载自blog.csdn.net/weixin_31866177/article/details/88760781
今日推荐