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