Skip to content

Commit 3c7b5cc

Browse files
committed
Dijkstra
1 parent 3208c2b commit 3c7b5cc

File tree

1 file changed

+47
-3
lines changed

1 file changed

+47
-3
lines changed

Dijkstra.go

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,17 @@ import (
55
)
66

77
const MAX_SIZE int = 5
8-
const MAX_VALUE int = 0
8+
const MAX_VALUE int = 9999
99

1010
func 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

2021
type 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

3781
func initGG(gg *Graph, vexs []string) {

0 commit comments

Comments
 (0)