找到所有可能的方法来连接一个断开的无向图,并为每种可能性计算从 src 到目的地的最短路径

Posted

技术标签:

【中文标题】找到所有可能的方法来连接一个断开的无向图,并为每种可能性计算从 src 到目的地的最短路径【英文标题】:find all possible ways to connect a disconnected undirected graph and calculate shortest path from src to destination for each possibility 【发布时间】:2016-09-01 05:58:13 【问题描述】:

在这个问题中,您将得到一个无向图,该图是不连接的,并且是具有每个顶点之间距离的二维矩阵。我试图找到所有可能的方法来从这个状态创建一个连接图,然后为每个可能的组合计算从顶点 0 到顶点 1 的最短路径的距离。顶点 0 被选为源顶点,所有具有到顶点 0 的路径的顶点都被认为是连接的,而所有没有到顶点 0 的路径的顶点都是不连接的。我正在尝试使用 BFS 查找所有可能的路径,但使用动态编程进行优化,但无法弄清楚子问题和数据结构应该是什么。

例如,给定此图,其中 V = 0,1,2 和 adj 矩阵(第一个)以及每个矩阵之间的距离(第二个):

  0 1 2          0 1 2
0 0 0 0        0 0 3 4
1 0 0 1        1 3 0 1
2 0 1 0        2 4 1 0

由于顶点 1 和 2 不相连,如果我将 0 连接到 1,则最短路径的长度将为 3。如果我将 0 连接到 2,则从 0 到 1 的最短路径将为 4+1。这两种情况的可能性相同。

什么是子问题,我应该如何解决这个问题?

【问题讨论】:

我不明白这两个矩阵是如何组合在一起的。在我看来,顶行和左列表示顶点,不属于矩阵。但是为什么矩阵中只有三个顶点呢?您在上面提到了四个顶点。我并不完全清楚您的优化目标是什么。首先,您写下您想要所有的连接方式。然后你写你想要优化。您真的想要所有可能性还是只想要一个最符合标准的可能性? 【参考方案1】:

将连接的组件折叠成多图的单个顶点(多条边可以连接两个顶点的图)。使用任何回溯搜索来枚举多重图的所有生成树。

这个任务的不可约复杂度是 K!,其中 K 是连接组件的数量。

使用传递闭包算法计算连通分量。

【讨论】:

以上是关于找到所有可能的方法来连接一个断开的无向图,并为每种可能性计算从 src 到目的地的最短路径的主要内容,如果未能解决你的问题,请参考以下文章

在无向图中通过其顶点找到一条边 [C++ BGL]

以最小成本断开无向加权图中的两个节点

图算法之最小生成树

无向图的连通分量

dfs 无向图两节点间的所有路径

[Data Structure & Algrithom] 无向图的最小生成树