我的问题是,我有一个具有非负边长的有向图G,我希望找到两个节点u和v之间的最短路径,使它们只通过图中一个标记过的节点。
如果没有涉及到标记节点的条件,这个问题可以很容易地使用Dijkstra算法解决。
此外,为了处理这种情况,我考虑添加一个值,该值给出了从s到u的当前最佳路径中节点数(每当更新dist(u)时都会更新此值)。但是,由于算法没有跟踪我们看到的所有可能的具有一个或更少节点的路径,而只是最短距离路径,因此这似乎并不起作用。
我的问题是,我是否正在正确的轨道上,只需要修改算法就可以?还是有另一种算法可以更轻松地实现这个目标?
此外,这是一个家庭作业问题,因此请勿发布整个解决方案,我只是在寻求指导。
如果没有涉及到标记节点的条件,这个问题可以很容易地使用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)时都会更新此值)。但是,由于算法没有跟踪我们看到的所有可能的具有一个或更少节点的路径,而只是最短距离路径,因此这似乎并不起作用。
我的问题是,我是否正在正确的轨道上,只需要修改算法就可以?还是有另一种算法可以更轻松地实现这个目标?
此外,这是一个家庭作业问题,因此请勿发布整个解决方案,我只是在寻求指导。