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算法的实现,未完,待续……

  • 相关阅读:
    test
    dd 命令 sd卡系统迁移
    关于庖丁分词
    Linux source命令
    Linux系统查看系统是32位还是64位方法总结 in 创新实训
    总结这两天连续干掉的bug In 创新实训 智能自然语言交流系
    穷举法应用——搬砖块
    判断素数类问题汇总
    统计计算学生成绩类问题汇总
    C语言简明数据类型指南
  • 原文地址:https://www.cnblogs.com/wanghetao/p/2497334.html
Copyright © 2011-2022 走看看