【问题标题】:Find the shortest path in an graph containing at most two red edges在最多包含两条红色边的图中找到最短路径
【发布时间】:2015-11-26 22:50:34
【问题描述】:

问题是:

我知道我们应该将图形复制到 G1 和 G2 中,并且可能使用 Dijstra 算法。我不知道我应该如何连接 G1 和 G2 才能为这个问题找到正确的解决方案。

【问题讨论】:

  • 让它变得更有趣。最短路径必须是简单路径吗?意思是,有没有可能有一个循环?好吧,答案是否定的,因为如果我们从最多有 2 个红色边的最短路径中删除该循环,我们将得到一条比我们的路径短的新路径。因此,我们找到的最短路径中不可能有环。

标签: algorithm graph-theory dijkstra


【解决方案1】:

你几乎有答案:

  1. 再制作两个图表副本,得到 G、G1 和 G2。
  2. 从 G2 中移除红色边,将 G1 中的每条红色边改为指向 G2 中对应的顶点而不是 G1,并将 G 中的每条红色边改为指向 G1 中的对应顶点。
  3. 现在,每条有 2 条红边的路径都以 G2 结束,而所有有 2 条红边的路径都以 G2 结束。类似地,所有具有 1 个红色边缘的路径都以 G1 结束。使用 Dijkstra 算法找到从 G 中的 s 到 G、G1 和 G2 中所有顶点的最短路径。
  4. 对于 G 中的每个顶点,查看 G、G1 和 G2 中相应顶点的路径,取最短的一个,并将其转换回原始图形。 (因为红边少于 2 条的路径也是可以接受的)

【讨论】:

  • 您跳过了一步。对于每个顶点 v,解是对应于 G、G1 和 G2 中的节点的最小距离。这是因为条件最多为 2 个红色边缘,因此您也可以只带一个或不带一个。
  • 谢谢!我不明白的东西,“将 G1 中的每个红色边缘更改为指向 G2 中的相应顶点而不是 G1”。如果一个红色边缘指向另一个红色边缘怎么办?那么我不能从 G1 到 G2 有优势
  • 边指向顶点,而不是其他边。如果路径 A->B->C 有 2 个红色边缘,则现在是 G.A->G1.B->G2.C。这个想法是,您始终可以通过您处于 G、G1 还是 G2 中来判断您已经穿过了多少红边。
  • 谢谢马特!这是很棒的解释
  • 让它变得更有趣。最短路径必须是简单路径吗?意思是,有没有可能有一个循环?好吧,答案是否定的,因为如果我们从最多有 2 个红色边的最短路径中删除该循环,我们将得到一条比我们的路径短的新路径。因此,在我们找到的最短路径中不可能存在循环。 @MattTimmermans
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 2011-07-19
  • 2019-10-20
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多