在给定函数的情况下找到具有最小权重的路径

时间:2017-04-22 18:15:42

标签: algorithm

我给出了无向图G = (V, E)s中的顶点V和函数w:E->{0,1}。鉴于v中的任何V,我需要返回路径的权重(路径的权重=路径边缘的权重之和)与来自s的最小权重在v时间到O(|V| + |E|)
这可能听起来像是一个我懒得解决的功课问题(我不时得到这些回复),但我一直在努力解决这个问题,我会非常高兴感谢您对我的任何帮助或指导。

1 个答案:

答案 0 :(得分:0)

这个问题可以通过BFS算法的类比来解决,但是使用deque(D)而不是队列。 Algo使用标记列表“标记”每个顶点,初始化为false。将出现与s的距离,因此您可以存储它们或使用“即时”。

D将存储对(vertex,distance_label)。

Algo开始:

D由(s,0)初始化。

在每次迭代中从D(顶点v)提取距离标签为d的前(头)顶点。

如果v已标记为已到达,请跳至下一次迭代。

否则,将v标记为已到达。现在d是s和v之间的正确距离。对于每个未到达的邻居(顶点w),更新它的距离标签(d_w = d + dist(v,w))并将对(w,d_w)放到D的头部,如果dist (v,w)= 0或将其置于尾部,否则。

Algo结束。

当您将它们标记为已到达时,您可以将距离存储到所有顶点。所有未到达的顶点都可能具有无穷远距离。

工作时间为O(| V | + | E |),因为您只需处理每个顶点和每个边(在带有s的连通分量中)。

通过与s的距离感应可以证明算法的正确性。