【问题标题】:All shortest paths in a graph using K reverse edges使用 K 个反向边的图中的所有最短路径
【发布时间】:2019-02-18 20:26:47
【问题描述】:

假设我有一个有向图 G(V,E) 在其边缘处具有正整数权重。我需要做的是使用最多 K(integer) 反向边缘找到所有顶点之间的最短路径。我的意思是也就是说:如果我们在边 u 并且只有一条从 v 到 u 的有向边,只要我们没有为此路径使用 K 个反向边,我们就可以使用它。这必须在 C++ 中实现并给出最短的结果是路径。

我考虑过运行 dijkstra V 次(类似于 Johnson 算法),但我不确定如何利用反向边缘属性。有什么想法吗?

【问题讨论】:

  • 这个问题最好在cs.stackexchange.com 门户中提出。另外,不清楚您所说的 K 是什么意思。

标签: algorithm graph graph-layering


【解决方案1】:

解决此类问题的常用方法通常被描述为“分层”。您(从概念上)制作图的 K+1 个副本,G0GK,然后在G中连接一个顶点ui >iG 中的一个顶点 vi+1i+1 如果在 G 中存在从 vu 的边。

G0中的s0tGi 中的 >i 则表示来自 s 的路径到 G 中的 t 使用 i 反向边缘,其中 i 最多为 K.

您可以在这个新的分层图上使用 Dijkstra 算法。

当你习惯了这一点时,你可以用一种更简单的方式来思考它:你只需使用 Dijkstra 的算法,而不是像 [reached v 这样的队列中的状态,成本 c],你使用像[达到v,成本c,使用i反向边]这样的状态。通常,当我们在现实生活中使用 Dijkstra 时,并没有给出实际的图表,因此将其视为对状态及其转换的搜索会有所帮助。

【讨论】:

  • 在 G_1 中,我们在 G_2 2 等中使用了 1 个反向边缘。我认为这是解决方案,谢谢!
猜你喜欢
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多