基本操作
适用情况:DAG
- 寻找图中任何一个没有先行者的节点
- 输出此顶点,并将此顶点的所有边删除
- 重复上面两个步骤处理所有的顶点
方法:BFS
例子
实现
import collections
def topologicalSorting(data, n):
edges = collections.defaultdict(list)
inDeg = [0] * n
for x, y in data:
edges[x - 1].append(y - 1)
inDeg[y - 1] += 1
q = collections.deque([])
for i in range(n):
if inDeg[i] == 0:
q.append(i)
while q:
temp = q.popleft()
print(temp + 1, end = ' ')
for edge in edges[temp]:
inDeg[edge] -= 1
if inDeg[edge] == 0:
q.append(edge)
if __name__ == "__main__":
data = [[1, 2], [1, 3], [1, 4],
[2, 5], [3, 5], [3, 6],
[4, 5], [4, 6], [7, 3], [7, 4]]
topologicalSorting(data, 7)