【问题标题】:Modified Shortest Path Algorithm (Dijkstra's)修改后的最短路径算法(Dijkstra 的)
【发布时间】:2015-10-22 20:55:31
【问题描述】:

所以我的问题是我有一个具有非负边长的有向图 G,我希望找到两个节点 u 和 v 之间的最短路径,以便它们只通过一个标记的节点在图中。

如果我们没有涉及标记节点的条件,则可以使用 Dijkstra 算法轻松解决此问题。

procedure dijkstra(G, l, s)
Input: Graph G = (V, E), directed or undirected;
positive edge lengths {le : e ∈ E}; vertex s ∈ V
Output: For all vertices u reachable from s, dist(u) is set to the distance from s to u.

for all u ∈ V :
    dist(u) = ∞
    prev(u) = nil
dist(s) = 0
H = makequeue(V ) (using dist-values as keys)
while H is not empty:
    u = deletemin(H)
    for all edges (u, v) ∈ E:
        if dist(v) > dist(u) + l(u, v):
            dist(v) = dist(u) + l(u, v)
            prev(v) = u
            decreasekey(H, v)

此外,为了处理我正在考虑添加一个值,该值给出了从 s 到 u 的当前最佳路径中的当前节点数(这将在更新 dist(u) 时更新)。但这似乎不起作用,因为该算法没有跟踪我们看到的具有一个或更少节点的所有可能路径,而只是跟踪距离最短的路径。

我的问题是我是否走在正确的轨道上,只需要额外修改算法吗?或者是否有其他算法可以更轻松地完成此任务?

另外,这是一个家庭作业问题,所以请不要发布完整的解决方案,我只是在寻找指导。

【问题讨论】:

  • 好问题!您对复杂性有什么限制吗?
  • 它应该具有与 Dijkstra 相当的时间复杂度

标签: graph path-finding


【解决方案1】:

由于您不想要整个解决方案,我会给您一些提示。停止阅读每一段,然后尝试解决问题,我会尝试从更一般的提示转向更具体的提示。

首先,我认为您当前的想法无法解决问题。因此,我将尝试引导您采用不同的方法。考虑 Dijkstra 是个好主意,但不要修改 Dijkstra,而是考虑转换图形,以便在新图形中运行 Dijkstra 解决原始问题。

如何解除集合P的原有限制?好吧,图表是有方向的(或者至少对于我的想法)是很重要的。想一个图的变换方法,强制进入P的一个节点,就不能再进入P的另一个节点。

最后的想法,还没有给出解决方案。考虑复制图,可能会删除一些边并以某种方式连接两个副本中的节点。

【讨论】:

  • 首先,我非常感谢您的回复。我想我明白你的目标了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2016-07-30
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多