def topsort(G):
#创建计数器,用于记录每个节点的入度
count = dict((u,0) for u in G)
#存储结果用的序列
seq = []
#统计G中节点的入度
for u in G:
for v in G[u]:
count[v] += 1
#寻找G中入度为0的节点
Q = [u for u in G if count[u] == 0]
while Q:
#把入度为0的节点从Q中删除,记录到seq内
u = Q.pop()
seq.append(u)
#连接到该节点的入度减1
for v in G[u]:
count[v] -= 1
#若又有入度为0的节点,继续迭代
if count[v] == 0:
Q.append(v)
return seq
用例测试:
graph = {
"A": ["B","C"],
"B": ["D","E"],
"C": ["D","E"],
"D": ["F"],
"E": ["F"],
"F": [],
}
seq = topsort(graph)
print(seq)
得到结果为
['A', 'C', 'B', 'E', 'D', 'F']