【问题标题】:How to find the shortest colored path?如何找到最短的彩色路径?
【发布时间】:2017-01-30 11:25:20
【问题描述】:

给定 G=(V,E) 每条边都有这三种颜色中的一种 {green,red,blue}。 如果他包含所有三种颜色,我们称其为“彩色路径”。

    Input: graph G(V,E),weight function w:E->Q+ , colored edges and vertices s .
    output: algorithm that finds for every vertices v, a shortest path from s 
           that is Colored path

我的解决方案是遍历图形,并为每个顶点计算路径具有的颜色数。创建名为 G1,G2,G3 的图的 3 个副本

对于每个 c(v) = 2 的 v(c 是从 s 到该路径的颜色数)在第二个图 (G​​2) 中将 v1 连接到 v2,边权重 = 0。

对于每条边 c(v)= 3 从 v2(从 G2)连接到 v3(到 G3),边权重 = 0。

从 s 到 t3 运行 dijkstra(在 G3 中)。

我的解决方案对吗?

【问题讨论】:

  • 与“经典”全对最短路径问题不同,可能存在顶点uv,其中根本没有从uv 的彩色路径,即使图是连通的;由于边缘的类别,问题似乎也不容易分解,因为彩色路径可以分解为不是彩色路径的路径。
  • 你能举一个更详细的例子吗?
  • 你的算法描述没有意义。什么是“每条边 c(v)=3”?什么是“从 s 到这条路径的颜色数”?
  • 我试图修补你的算法描述,但我在试图弄清楚你实际上想说什么的过程中被卡住了。您似乎正在创建图 G2 的第二个副本,然后在 G1 和 G2 之间添加额外的边,以便生成的图同时具有 G1 和 G2 作为子图?
  • 我的意思是我们删除 G1 中顶点的值为 c(v) = 2 的边(这意味着从 s 到 v 的路径有 2 种不同的颜色)并将它们连接到重复图G2.G2 与 G1 具有相同的顶点和边,但它在 c(v) = 2 的顶点与 c(u) = 3 的顶点(具有 3 种不同颜色的顶点)之间没有边,因为我们将它们连接起来图 G3 也是 G1 的相同顶点和边。因此,在我们构建图之后,我们使用从图一(G1)中的 s 到图 3(G3)中的 t 的 Dijkstra。

标签: algorithm shortest-path


【解决方案1】:

在我看来不正确。

最简单的方法是意识到在普通的 Dijkstra 中,每个节点中只有一个重要的东西要存储,那就是从根节点开始的绝对最短路径长度。

对于彩色路径,您必须存储每种颜色组合的最短路径长度。所以,对于 3 种颜色,你必须存储最短的红色路径、最短的蓝色路径、最短的绿色路径,以及最短的红蓝、红绿和蓝绿路径,最后是最短的红绿路径-蓝色路径。 (共 7 种颜色组合)。

【讨论】:

  • 看来是对的,解释颇有见地。不知何故,我期望这个问题在复杂性方面会变得更加困难。更简洁地说:Dijkstra 的算法适用于单源版本,而不是全巴黎版本。
猜你喜欢
  • 2014-04-14
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多