使用瞬移在图中查找最短路径

Posted

技术标签:

【中文标题】使用瞬移在图中查找最短路径【英文标题】:Finding the shortest path in a graph with teleports 【发布时间】:2022-01-10 08:29:05 【问题描述】:

我有这个图表问题,我不知道如何解决。

我有一个 N 个顶点编号为 1-N 的无向图。每个编号为i 的顶点都有一个任意的“等级”,可以是1-i 之间的任何位置。多个顶点可以具有相同的排名。

在遍历图形时,任何等级为r 的顶点都可以立即传送/遍历到另一个具有相同等级r 的顶点。这意味着如果来自组件 A 的至少一个顶点与来自组件 B 的顶点具有相同的等级,则未连接的组件仍然是“连接的”。

如何计算从顶点 A 遍历到顶点 B 所需的最小顶点数?


我非常幼稚的解决方案是将连接每个同等排名的顶点的每条边添加到图中,然后应用标准的寻路算法。这具有非常长的时间复杂度,但我想不出更有效的方法来解决这个问题。

有什么帮助吗?

【问题讨论】:

【参考方案1】:

您已经注意到,在相同等级节点之间添加所有边太慢了 - 在最坏的情况下,所有节点都具有相同等级,它会转到 O(n^2)

解决这个问题的一种方法是为每个等级引入新节点,并将相同等级的所有节点连接到一个新节点(即等级为 1 的节点连接到节点 n+1,依此类推)。

然后您可以在遍历新节点时考虑其权重为 0 - 这样您可以简单地使用出队执行 0-1 BFS(一旦遇到,将 0 个权重节点添加到前面,将其他节点添加到末尾) - 这个是线性的,所以它可以在 O(n) 中求解

【讨论】:

以上是关于使用瞬移在图中查找最短路径的主要内容,如果未能解决你的问题,请参考以下文章

数据结构8——最短路径

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

查找 NetworkX 中所有节点对之间的所有最短路径

图-最短路径-Dijkstra及其变种

软考 系统架构设计师数学与经济管理① 图论应用

软考 系统架构设计师数学与经济管理① 图论应用