File tree 1 file changed +14
-19
lines changed
1 file changed +14
-19
lines changed Original file line number Diff line number Diff line change @@ -34,41 +34,36 @@ type Edge struct {
34
34
func Dijkstra (gg * Graph , start int ) {
35
35
36
36
var dist [MAX_SIZE ]int //路劲长度数组
37
- var flag [MAX_SIZE ]bool
38
- var prev [MAX_SIZE ]int
37
+ var ss [MAX_SIZE ]bool //最短路劲节点集合
39
38
40
39
//init
41
40
dist = gg .matrix [start ]
42
- flag [start ] = true //find start to start
43
- dist [start ] = 0 //start to start length
44
- fmt .Println ("dist : " , dist )
41
+ ss [start ] = true //find start to start
42
+ dist [start ] = 0 //start to start length
45
43
46
- //广度搜索
47
44
for i := 0 ; i < gg .vexnum ; i ++ {
48
45
k := 0
49
46
min := MAX_VALUE
50
- //find min
47
+ fmt .Println ("-----------" )
48
+ fmt .Println (dist , ss )
49
+ //find next 贪心
51
50
for j := 0 ; j < len (dist ); j ++ {
52
- if flag [j ] == false && dist [j ] != MAX_VALUE && dist [j ] < min {
51
+ if ss [j ] == false && dist [j ] != MAX_VALUE && dist [j ] < min {
53
52
min = dist [j ]
54
53
k = j
55
54
}
56
55
}
57
56
58
57
//set find
59
- flag [k ] = true
58
+ ss [k ] = true
60
59
61
60
//update dist length
62
- for u := 0 ; u < len (dist ); u ++ {
63
- weigth := 0
64
- if gg.matrix [k ][u ] == MAX_VALUE {
65
- weigth = MAX_VALUE
66
- } else {
67
- weigth = min + gg.matrix [k ][u ]
68
- }
69
- if flag [u ] == false && weigth < dist [u ] {
70
- dist [u ] = weigth
71
- prev [u ] = k
61
+ for u := 0 ; u < gg .vexnum ; u ++ {
62
+ if gg.matrix [k ][u ] != MAX_VALUE && ss [u ] == false {
63
+ weight := min + gg.matrix [k ][u ]
64
+ if weight < dist [u ] {
65
+ dist [u ] = weight
66
+ }
72
67
}
73
68
}
74
69
You can’t perform that action at this time.
0 commit comments