文章目录
article
有向无环图
AI文章摘要
qwen-turbo-latest
加载中...
有向无环图(Directed Acyclic Graph)
graph TB subgraph Directed Acyclic Graph direction TB A((0)) B((1)) C((2)) --> D D((3)) --> B E((4)) --> A F((5)) --> A F --> C E --> B end
拓扑排序
在有向无环图(DAG)中,若一条边确定由A指向B,则遍历结果中A将始终排在B的前面的排序方式称为拓扑排序。它的核心思想是跟踪顶点的入度(In Degree), 当入度为0时可以访问当前节点(代表当前顶点的前驱顶点已经访问完毕),访问当前节点之后对邻接顶点的入度减1,循环迭代直至所有节点入度为0。我们可以使用队列存储入度为0的顶点,当对邻接顶点入度减少到0是入队,队列为空时代表所有节点入度为0。
若希望找到所有的拓扑排序,需要配合递归和回溯思想。每次遍历取入度为0且未被发现的顶点v,更新v的的邻接顶点的入度,添加v到路径列表path,然后进行归查找。函数在达到递归最深层时(所有节点被发现),准备返回时判断path的长度等于顶点数量则输出路径到结果。当递归返回时需要恢复v邻接顶点的入度,并将v从l中移除。