使用深度优先搜索(DFS)进行拓扑排序是一种不使用拓扑排序算法的拓扑排序方法。下面是使用DFS实现拓扑排序的代码示例:
from collections import defaultdict
def dfs(node, graph, visited, stack):
visited[node] = True
for neighbor in graph[node]:
if not visited[neighbor]:
dfs(neighbor, graph, visited, stack)
stack.append(node)
def topological_sort(graph):
visited = defaultdict(bool)
stack = []
for node in graph:
if not visited[node]:
dfs(node, graph, visited, stack)
stack.reverse()
return stack
# 测试用例
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': [],
'E': [],
'F': []
}
sorted_nodes = topological_sort(graph)
print("拓扑排序结果:", sorted_nodes)
输出为:拓扑排序结果:['A', 'C', 'F', 'B', 'E', 'D']
在这个示例中,我们首先定义了一个图(用字典表示),然后使用DFS进行拓扑排序。DFS函数使用递归的方式遍历每个节点的邻居节点,并递归调用DFS函数。通过visited字典来记录节点是否已经被访问过,避免重复访问。最后,我们将拓扑排序的结果存储在一个栈中,并返回栈的逆序作为最终的拓扑排序结果。