设G(V,E)为有向连通图,其中没有负循环。所有边缘都具有非负重量,除了一个边缘。在V中找到s,t的简单最短路径。
我的想法 -
我的想法不起作用。
你能帮我找出原因吗?
谢谢。
答案 0 :(得分:1)
你的方法不起作用的原因是它不公平地惩罚具有更多边缘的路径。
想象一下从源节点到目的地的两条路径,一条路径边缘较多,但权重较低,另一条路径边缘较重,权重较高。让我们假设添加到每个边缘的权重是3。
原始路径:
S -> 1 -> 1 -> 1 -> 1 -> 1 -> T wt = 5
S -> 4 -> 3 -> T wt = 7
增加体重后的路径:
S -> 4 -> 4 -> 4 -> 4 -> 4 -> T wt = 20
S -> 7 -> 6 -> T wt = 13
如您所见,第二条路径现在被错误地识别为较短路径。
答案 1 :(得分:0)
您的方法存在的问题是,如果一个负边缘具有较大的负值,则可能会创建更多负边缘。
您可以研究Bellman-Ford最短路径算法来解决此问题:
1)第一步是将从源到所有顶点的距离初始化为无穷大,并将到源自身的距离初始化为0。创建大小为| V |的数组dist []。除dist [src](其中src是源顶点)之外的所有值都为无穷大。
2)此步骤计算最短距离。跟随| V | -1次,其中| V |是给定图中顶点的数量。 …..a)对每个边u-v进行跟随 ………………如果dist [v]> dist [u] +边缘uv的权重,则更新dist [v] ………………….dist [v] = dist [u] +边缘uv的权重
3)此步骤报告图表中是否存在负重量循环。跟随每个边缘u-v ……如果dist [v]> dist [u] +边缘uv的权重,则“图形包含负权重周期” 第3步的想法是,如果图表不包含负权重循环,则第2步可确保最短距离。如果我们再遍历所有边缘一次并为任何顶点获得一条较短的路径,那么负周期就会变负