拓扑排序算法:
拓扑排序要满足如下两个条件
- 每个顶点出现且只出现一次。
- 若A在序列中排在B的前面,则在图中不存在从B到A的路径。
拓扑排序算法
任何无回路的顶点活动网(AOV网)N都可以做出拓扑序列:
- 从N中选出一个入度为0的顶点作为序列的下一顶点。
- 从N网中删除所选顶点及其所有的出边。
- 反复执行上面两个步骤,知道已经选出了图中的所有顶点,或者再也找不到入度为非0的顶点时算法结束
例程中两种建图的方法都可以.
def toposort(graph):
in_degrees=dict((k,0)for k in graph )
for u in graph:
for v in graph[u]:
in_degrees[v]+=1
seq=[]
Q=[ u for u in in_degrees if in_degrees[u]==0]
while Q:
u=Q.pop()
seq.append(u)
for v in graph[u]:
in_degrees[v]-=1
if in_degrees[v]==0:
Q.append(v)
if len(in_degrees)==len(seq):
return seq
else:
print("error")
'''
G = {
'a':'bce',
'b':'d',
'c':'d',
'd':'',
'e':'cd'
}
'''
G = {
'a':['b','c','e'],
'b':['d'],
'c':['d'],
'd':[],
'e':['c','d']
}
print(toposort(G))
运行结果: