在计算机科学中,当我们处理复杂的任务时,我们通常需要按照一定的顺序来完成这些任务,这便是图 🌐 中的拓扑排序。今天,我将为你展示如何使用Python进行拓扑排序,并附上详细的代码注释,让你轻松理解其中的奥秘。
首先,让我们了解一下什么是拓扑排序。简单来说,它是一种线性排序,可以应用于有向无环图(DAG)中的顶点,使得每一条有向边 (u, v) 都是从顶点 u 排列到顶点 v。这就像一个项目计划,必须先完成任务 A 才能开始任务 B。
接下来,我们将深入探讨如何实现这个算法。这里用到了深度优先搜索(DFS)的方法,通过递归的方式遍历每个节点,记录节点的访问状态,并且维护一个栈来存储节点。最后,从栈中弹出节点,即可得到拓扑排序的结果。
以下是代码实现:
```python
导入必要的库
from collections import defaultdict
创建一个图类
class Graph:
def __init__(self, vertices):
self.graph = defaultdict(list)
self.V = vertices
添加边
def addEdge(self, u, v):
self.graph[u].append(v)
深度优先搜索
def DFSUtil(self, v, visited, stack):
visited[v] = True
for i in self.graph[v]:
if visited[i] == False:
self.DFSUtil(i, visited, stack)
stack.append(v)
主函数
def topologicalSort(self):
visited = [False]self.V
stack = []
for i in range(self.V):
if visited[i] == False:
self.DFSUtil(i, visited, stack)
print(stack[::-1])
g = Graph(6)
g.addEdge(5, 2)
g.addEdge(5, 0)
g.addEdge(4, 0)
g.addEdge(4, 1)
g.addEdge(2, 3)
g.addEdge(3, 1)
print("拓扑排序结果:")
g.topologicalSort()
```
希望这段代码和解释能够帮助你更好地理解和应用拓扑排序算法!
免责声明:本文由用户上传,如有侵权请联系删除!