使用最小生成树 - C / C ++查找从A到B的路径

时间:2012-07-09 16:03:39

标签: c++ algorithm tree graph-algorithm minimum-spanning-tree

假设我们找到了一棵最小的生成树。现在,我们只需要在MST中从A到Z的路径。我们怎样才能在O(n ^ 2)时间内做到这一点?

我们从根A开始。然后我们查看树形式Ax中的所有边(其中x是任何顶点)。

然后,我们发现:AB,AC,AD等...... 然后对于每一个,我们寻找形式的边缘:Bx,Cx,Dx ......这显然不是O(n ^ 2)。

那么找到路径A的更好/更有效的方法是什么? Z给出了MST?

由于

4 个答案:

答案 0 :(得分:5)

Depth-first search就足够了,最坏的情况是 O(| V | + | E |)。输入是MST的事实意味着您不必担心任何循环检测,就像在一般图表中一样。

答案 1 :(得分:0)

查找Minimum Spanning Tree,您会发现它是将所有顶点连接在一起的最小子图。这意味着每个边缘将在最多一次使用。您可以使用DFS或BFS来查找所需的路径,而无需检查周期,因为您已经拥有MST。

答案 2 :(得分:0)

在创建MST期间,您可以填充parent [],因此在使用简单的回溯之后,您将能够找到没有DFS的路径。

答案 3 :(得分:0)

如果你考虑一下,Prim的寻找MST的算法实际上只是Dijkstra的伪装。因此,如果找到MST,MST已经为您提供了最短的路径(如上所述,想想DFS)。