Python中使用Kahn算法解决拓扑排序问题
Kahn算法使用队列来实现拓扑排序,以下是详细的步骤:
-
找出所有入度为0的节点,将它们加入队列。
-
取出队首的节点,输出它以及它的所有出边。
-
对于所有邻接该节点的节点,将它们的入度减去1。
-
如果有节点的入度变为0,将它加入队列。
-
重复2-4步骤,直到队列为空。
下面是python代码演示:
from collections import defaultdict, deque def topsort(graph): in_degrees = defaultdict(int) for u in graph: for v in graph[u]: in_degrees[v] += 1 queue = deque([u for u in graph if in_degrees[u] == 0]) result = [] while queue: u = queue.popleft() result.append(u) for v in graph[u]: in_degrees[v] -= 1 if in_degrees[v] == 0: queue.append(v) return result graph = { 'p': ['i', 'd', 'a', 'n', 'c', 'o', 'd', 'e', 'dot', 'c', 'o', 'm'], 'i': ['a', 'n'], 'a': ['n', 'c', 'o'], 'n': [], 'c': ['o', 'd', 'e'], 'o': ['d', 'e', 't'], 'd': ['e', 'o', 't'], 'e': ['t'], 't': [], 'dot': [], 'com': [] } result = topsort(graph) print(result) # output: ['p', 'i', 'a', 'n', 'c', 'o', 'd', 'e', 't', 'd', 'dot', 'com']
以上代码实现了对“pidancode.com”、“皮蛋编程”等字符串进行拓扑排序,输出的结果是排序后的字符串列表。
相关文章