zoukankan      html  css  js  c++  java
  • 图的BFS与DFS的应用

    1. BFS的应用

    图的BFS算法可以用来求从图中一个顶点到其余各个顶点的最短路径。如果对图中每个顶点都使用一次BSF,就可以求出从图中每个顶点到其余各个顶点的最短路径。

    2. DFS的应用

    2.1 拓扑排序

    DFS算法可以用来求一个有向无回路图的拓扑排序,算法的伪代码如下:

    从伪代码中可以看出,图中的各个节点是按完成时间 f 降序顺序排序的。然后依次输出排序后的结果就能得到一个拓扑排序。

    2.2 找出图中的所有强联通分支

    DFS算法也可以找出一个有向图的所有强连通分支。伪代码如下:

    该算法首先调用DFS(G)构造出一个深度优先搜索森林并球出了各个节点的完成时间f[u]。求图G的矩阵表示的转置矩阵GT,然后在GT上再次调用DFS(),但是这次不是按随机顺序任意访问节点,而是按在第一次DFS()中求出的各个节点的f[u]降序顺序访问。这次同样构造出了一个深度优先搜索森林,其中每一棵深度优先搜索树就是一个原图的强连通分支。

    读到这里大家也许会奇怪:为什么这个算法有些诡异?为什么一次DFS搞不定?为什么要计算G的转置矩阵?为什么第二次DFS要按f[u]的降序排序?

    欲知原因,请参见《算法导论》中文版第339页,有些复杂,不是一两句话能说明白的。

    strongly_connected component算法的实现,未完,待续……

  • 相关阅读:
    第一天
    python自测——其他内容
    python自测——正则表达式
    python自测——高级特性
    人机对战石头剪刀布代码
    [Usaco2004 Nov]Til the Cows Come Home 带奶牛回家
    Dijkstra概念
    洛谷p1339--热浪
    0-1背包问题变形------------cow exhibition
    [Poi2005]Piggy Banks小猪存钱罐
  • 原文地址:https://www.cnblogs.com/wanghetao/p/2497334.html
Copyright © 2011-2022 走看看