File tree Expand file tree Collapse file tree 1 file changed +13
-2
lines changed Expand file tree Collapse file tree 1 file changed +13
-2
lines changed Original file line number Diff line number Diff line change @@ -42,16 +42,27 @@ func initEdge() {
42
42
}
43
43
44
44
func Bellman () {
45
+ //nodeNum -1 自身节点需要去除
45
46
for i := 0 ; i < nodeNum - 1 ; i ++ {
47
+ //查找已知权重节点 相连接节点 并且更新权重
46
48
for j := 0 ; j < edgeNum ; j ++ {
47
- //开始节点 权值 >
48
49
if dist [edge [j ].v ] > dist [edge [j ].u ]+ edge [j ].weight {
49
50
dist [edge [j ].v ] = dist [edge [j ].u ] + edge [j ].weight
50
51
}
51
- fmt . Println ( dist )
52
+
52
53
}
53
54
}
55
+ fmt .Println (dist )
54
56
57
+ //不存在负环路时,都有 v.d < = u.d + w ( u , v )
58
+ for i := 0 ; i < edgeNum ; i ++ {
59
+ if dist [edge [i ].v ] > dist [edge [i ].u ]+ edge [i ].weight {
60
+ //存在负环路时,一定存在某条边使得 v.d >u.d + w ( u , v )
61
+ fmt .Println ("Find 负环路" )
62
+ return
63
+ }
64
+ }
65
+ //另一种方案 从start出发。不断维护每个点的最短距离,如果有负权环,则会进行无数次的维护,越来越小,所以如果循环次数大于了V - 1则有负权环。
55
66
}
56
67
57
68
func main () {
You can’t perform that action at this time.
0 commit comments