怎么用DFS算法求拓扑排序
时间: 2023-09-01 12:10:50 浏览: 73
1. 建立有向图:将所有边连接起来,构建有向图。
2. 对每个节点进行 DFS 遍历:从每个节点开始进行 DFS 遍历,记录每个节点的访问状态。
3. 对访问状态进行分类:将每个节点分为三种状态,未访问、正在访问和已访问。如果一个节点被标记为正在访问,则说明它正在被遍历,如果一个节点被标记为已访问,则说明它已经被遍历完成。
4. 每次遍历完成一个节点时,将其加入拓扑排序结果中。
5. 如果在遍历过程中发现一个节点已经被标记为正在访问,说明图中存在环,无法进行拓扑排序。
6. 最终得到的结果即为拓扑排序的结果。
以下是 Python 代码示例:
```
def dfs(node, visited, graph, res):
if visited[node] == 1:
return False
if visited[node] == 2:
return True
visited[node] = 1
for neighbor in graph[node]:
if not dfs(neighbor, visited, graph, res):
return False
visited[node] = 2
res.append(node)
return True
def topological_sort(graph):
visited = {node: 0 for node in graph}
res = []
for node in graph:
if not dfs(node, visited, graph, res):
return []
return res[::-1]
```
其中,graph 为有向图,res 为拓扑排序的结果。
阅读全文