在图中找到两条“距离”的最短路径

计算科学 算法 图论
2021-12-26 09:24:31

问题如下:给定一个图,每个边长为 1,有两对顶点 (a,b) 和 (c,d)。

如何找到从 a 到 b 和从 c 到 d 之间的最短路径,假设有一种方法可以通过两条路径(逐步)移动,这样在任何时候我们的代理(从 a 移动到 b 和其他从 c 移动到 d) 将彼此相距至少 k?

编辑:

为了更清楚:

  • 代理分别移动,因此在每个步骤中只有一个代理移动,并且代理可以连续移动几次(另一个“等待”)。
  • 我们正在寻找总长度最小的路径。
  • 如果存在一系列代理移动,其中代理在任何时候至少有 k 个距离,则路径是“有效的”。

我们可以假设输入很好,所以总是存在满足条件的路径对。

2个回答

根据 OP 的说明,通过将 Dijkstra 的最短路径算法应用于原始图的两个副本的乘积的自然子图,给出了一个精确的解决方案。

V是有序对(u,v)的原始节点“彼此相距至少k”。假设所需代理路径的两个端点(a,c)(b,d)属于V.

定义边缘V因为两对的一个坐标完全相同,而另一个坐标是由原始图的边连接的节点。也就是说,如果vw是原始图中的连接节点,对于任何u不小于k远离两者vw,然后的边缘V连接(u,v)(u,w)也是一个边缘V连接(v,u)(w,u).

正如已经澄清的那样,一个代理在另一个代理移动的每一步“等待”,它仍然只需要注意从(a,c)(b,d)V只是两个代理的路径长度之和。因此最短路径在V对应于我们希望最小化的这个数量。

我不知道任何确切的算法,但我看到至少有两种近似最优解的方法:

  • 计算最短路径a>bc>d使用任何现有算法(例如,Dijkstra 算法)。然后模拟两条路径,如果在某一步骤中两个代理太靠近,请执行以下操作之一: (i) 绕道一:例如,如果代理 A 在顶点v并且在v之前,然后替换步骤v>v经过v>v>v如果可以与代理 B 的位置的距离最大,但与距离均为 1 。(ii) 如果不存在与则只需在位置再停留一个时间步长。vvvvv,vv

  • 在图中找到一条按此顺序之间的距离至少为所需的间距两个代理沿着这条公共路径遍历图。a,c,b,dack

我最好的猜测是,如果考虑中的顶点彼此“接近”(相对于),那么第二种算法会更好。否则,第一个算法将产生更好的路径。两种方法都发现它们的结果与最短路径查找算法具有相同的复杂性。k