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



假设我们找到一个最小生成树。现在,我们只需要在MST中找到一条从a到Z的路径。我们如何在O(n^2)时间内做到这一点?

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

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

那么,在给定MST的情况下,找到路径a->Z的更好/有效的方法是什么呢?

感谢

深度优先搜索就足够了,在最坏的情况下是O(|V|+|E|)。事实上,您的输入是MST,这意味着您不必像在一般图中那样担心任何循环检测。

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

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

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

最新更新