【发布时间】: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