def aovpath(aov):#从入度为0的开始顶点i找关键路径
for i in range(len(aov)):
if 0==aov[i][0]:
findaov(i)
def findaov(a,p=[],r=[]):
p.append(a)#路径入栈
if 0==len(aov[a][1]):print(p)#到终点
for i in list(aov[a][1]):#还有后续
r.append(i)#子分支入栈
while 0!=len(r):
findaov(r.pop(),p,r)#分支出栈,递归调用findaov
p.pop()#a出栈
aov = ((0,(2,7)),(0,(2,3,4)),(2,(3,)),(2,(5,6)),(1,(5,)),
(2,()),(2,()),(1,(8,)),(1,(6,))) #(0,(2,7)),顶点0的入度0,后续顶点2和7.
aovpath(aov)的拓扑排序结果
[0, 2, 3, 5]
[0, 2, 3, 6]
[0, 7, 8, 6]
[1, 2, 3, 5]
[1, 2, 3, 6]
[1, 3, 5]
[1, 3, 6]
[1, 4, 5]