访问k个顶点的无向图中的最短路径

Posted

技术标签:

【中文标题】访问k个顶点的无向图中的最短路径【英文标题】:Shortest path in an undirected graph that visits k vertices 【发布时间】:2013-03-30 03:09:02 【问题描述】:

考虑一个无向图。有n个顶点和m个边。所有的边都有一个与之关联的权重。

我想设计一种算法,它将源顶点“s”、汇顶点“t”和数字“k”作为输入。算法的输出是从 s 到 t 的最短路径,在 s 和 t 之间有 k 个顶点。

请提出建议。谢谢!

【问题讨论】:

你提到边有重量。你的意思是问“找到从 s 到 t 的路径,长度为 k+2,边权重之和最小?” 这是您要找的吗? ***.com/questions/9996808/… @mbeckish 这绝对正确。更准确地说,我需要找到一条从 s 到 t 的路径,其中 k 个顶点位于 s 和 t 之间。此外,与在 s 和 t 之间具有 k 个顶点的其他类似路径相比,该路径必须具有最小和。 【参考方案1】:

创建一个与您的图关联的 [numvertices][numvertices] 距离矩阵。然后运行 ​​Floyd 算法,但只是 k 次迭代而不是 numvertices 次迭代。

【讨论】:

【参考方案2】:

经过小型研究,我发现这个问题是 NP-Hard。因此我不得不使用参数化技术来解决这个问题。我用的算法是固定参数易处理算法。

我在算法中使用了Lawler's modification of the Yen's algorithm 来解决这个问题。 Yen 算法有助于找出无环网络中的前 n 条最短路径。我的算法是这样的:

    从用户那里获取参数k(路径中的顶点数)。还要从用户那里得到“m”,这是路径不应超过的最大距离。这是将帮助我们在多项式时间内解决 NP-Hard 问题的参数。

    这一步使用日元算法。找到下一条最短路径。检查路径是否有 k 个顶点。

    一个。如果是,中止并返回路径 湾。否则,2

    如果路径总距离超过参数'm',则中止并返回'no result'

Yen 算法使用 Dijkstra 算法来寻找最短路径。实现这个算法来解决这个问题很有趣。

【讨论】:

以上是关于访问k个顶点的无向图中的最短路径的主要内容,如果未能解决你的问题,请参考以下文章

数据结构图之三(最短路径--迪杰斯特拉算法——转载自i=i++

44-Floyd 算法

用Dijkstra算法求图中从顶点a到其他各顶点间的最短路径,并写出执行算法过程中各步的状态。

LA 6891 Money Transfers(最短路)

去除最少边以强制增加未加权无向图中最短路径长度的算法

最短路径的floyd算法的时间复杂度