@@ -5,16 +5,17 @@ import (
55)
66
77const MAX_SIZE int = 5
8- const MAX_VALUE int = 0
8+ const MAX_VALUE int = 9999
99
1010func main () {
1111 fmt .Println ("Dijkstra" )
1212 var gg Graph
13- var vexs = []string {"B " , "A " , "C" , "D" , "E" }
13+ var vexs = []string {"A " , "B " , "C" , "D" , "E" }
1414 gg .vexnum = 5
1515 gg .vexs = vexs
1616 initGG (& gg , vexs )
1717 PrintG (gg , 5 )
18+ Dijkstra (& gg , 1 )
1819}
1920
2021type Graph struct {
@@ -30,8 +31,51 @@ type Edge struct {
3031 weight int
3132}
3233
33- func Dijkstra () {
34+ func Dijkstra (gg * Graph , start int ) {
3435
36+ var dist [MAX_SIZE ]int //路劲长度数组
37+ var flag [MAX_SIZE ]bool
38+ var prev [MAX_SIZE ]int
39+
40+ //init
41+ dist = gg .matrix [start ]
42+ flag [start ] = true //find start to start
43+ dist [start ] = 0 //start to start length
44+
45+ k := 0
46+ //广度搜索
47+ for i := 0 ; i < gg .vexnum ; i ++ {
48+ min := MAX_VALUE
49+ //find min
50+ for j := 0 ; j < gg .vexnum ; j ++ {
51+ if flag [j ] == true && dist [j ] < min {
52+ min = dist [j ]
53+ k = j
54+ }
55+ }
56+
57+ //set find
58+ flag [k ] = true
59+
60+ //update dist length
61+ for u := 0 ; u < gg .vexnum ; u ++ {
62+ weigth := 0
63+ if gg.matrix [k ][u ] == MAX_VALUE {
64+ weigth = MAX_VALUE
65+ } else {
66+ weigth = gg.matrix [k ][u ]
67+ }
68+ if flag [u ] == true && weigth < dist [u ] {
69+ dist [u ] = weigth
70+ prev [u ] = k
71+ }
72+ }
73+
74+ }
75+
76+ for i := 0 ; i < gg .vexnum ; i ++ {
77+ fmt .Printf ("shortest %s->%s = %d\n " , gg .vexs [start ], gg .vexs [i ], dist [i ])
78+ }
3579}
3680
3781func initGG (gg * Graph , vexs []string ) {
0 commit comments