我正在寻找一个优雅的Python程序来完成BFS的几个DAG:
如果A“依赖于”B(考虑到python包Foo“取决于”Bar:Foo-> Bar),则节点A连接到B(A->B
)。
在大约7000个此类节点的图表中,我想对所有节点进行排序,以便(i, j)
.. 1>=i<j<=7000
为False的所有可能depends(Ni, Nj)
。依赖(A,B)= True当且仅当A->B
或A“依赖于”B ...而Nx
是在排序列表中x
位置出现的节点。< / p>
注意:节点可以有多个父节点。例如:A-> C和B-> C.因此,根据上述排序规则,A和B必须在C之前。
答案 0 :(得分:5)
如果我正确地阅读了这个问题,看起来你想要一个topological sort。执行此操作的最有效算法(O(V + E))由Tarjan提出,可以找到Python实现here。
偏离主题,但好像你的包依赖类比是相反的;我认为“A取决于B”意味着“B-> A”,但当然这不会改变树的结构,只是反过来。