📜  深度优先搜索的应用

📅  最后修改于: 2022-05-13 01:57:53.876000             🧑  作者: Mango

深度优先搜索的应用

深度优先搜索 (DFS) 是一种用于遍历图的算法(或技术)。

以下是使用 DFS 作为构建块的问题。

1) 检测图中的循环
当且仅当我们在 DFS 期间看到后边时,图才具有循环。所以我们可以为图运行 DFS 并检查后边。 (详情请看这里)

2) 寻路
我们可以专门化 DFS 算法来找到两个给定顶点 u 和 z 之间的路径。
i) 以 u 作为起始顶点调用 DFS(G, u)。
ii) 使用堆栈 S 来跟踪起始顶点和当前顶点之间的路径。
iii)一旦遇到目标顶点z,就返回路径作为
堆栈的内容

有关详细信息,请参阅此。

3)拓扑排序
拓扑排序主要用于根据作业之间的给定依赖关系调度作业。在计算机科学中,这种类型的应用出现在指令调度、重新计算电子表格中的公式值时对公式单元求值的排序、逻辑综合、确定要在 makefile 中执行的编译任务的顺序、数据序列化以及解决链接器中的符号依赖性 [2 ]。

4)测试一个图是否是二分
当我们第一次发现一个新顶点时,我们可以增加 BFS 或 DFS,将它的颜色与它的父节点相反,并且对于每个其他边,检查它没有链接两个相同颜色的顶点。任何连接组件中的第一个顶点可以是红色或黑色!有关详细信息,请参阅此。

5) 寻找图的强连通分量如果有向图从图中的每个顶点到每个其他顶点都有一条路径,则称为强连通图。 (有关查找强连接组件的基于 DFS 的算法,请参阅此内容)

6)只用一种解决方案解决难题,例如迷宫。 (DFS 可以通过仅包括访问集中当前路径上的节点来适应迷宫的所有解决方案。)

资料来源:
http://www8.cs.umu.se/kurser/TDBAfl/VT06/algorithms/LEC/LECTUR16/NODE16.HTM
http://en.wikipedia.org/wiki/Depth-first_search
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/GraphAlgor/depthSearch.htm
http://ww3.algorithmdesign.net/handouts/DFS.pdf