访问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++