非循环有向图的BFS遍历算法

时间:2009-07-20 21:54:23

标签: python algorithm graph dependencies traversal

我正在寻找一个优雅的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之前。

1 个答案:

答案 0 :(得分:5)

如果我正确地阅读了这个问题,看起来你想要一个topological sort。执行此操作的最有效算法(O(V + E))由Tarjan提出,可以找到Python实现here

偏离主题,但好像你的包依赖类比是相反的;我认为“A取决于B”意味着“B-> A”,但当然这不会改变树的结构,只是反过来。