Skip to content

Commit 37ca3c2

Browse files
committed
prim finish
1 parent 7bf8707 commit 37ca3c2

File tree

1 file changed

+62
-4
lines changed

1 file changed

+62
-4
lines changed

Prim.go

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const MAX_VALUE int = 9
1313
func main() {
1414
fmt.Println("Prim")
1515
var gg Graph
16-
var vexs = []string{"A", "B", "C", "D", "E"}
16+
var vexs = []string{"B", "A", "C", "D", "E"}
1717
gg.vexnum = 5
1818
gg.vexs = vexs
1919

@@ -28,7 +28,7 @@ func main() {
2828
fDFS(&gg)
2929

3030
//listgg := list.New()
31-
31+
prim(&gg, 0)
3232
PrintG(gg, len(vexs))
3333
}
3434

@@ -96,7 +96,6 @@ func fBFS(gg *Graph) {
9696

9797
for listq.Len() > 0 {
9898
index := listq.Front()
99-
10099
fmt.Println(gg.vexs[index.Value.(int)])
101100
for i := 0; i < gg.vexnum; i++ {
102101
if !visit[i] && gg.matrix[index.Value.(int)][i] != MAX_VALUE {
@@ -108,6 +107,65 @@ func fBFS(gg *Graph) {
108107
}
109108
}
110109

111-
func prim() {
110+
func prim(gg *Graph, start int) {
111+
index := 0
112+
sum := 0
113+
prims := make([]string, 10, 10)
114+
var weights [5][2]int //[[0 0] [0 5] [0 3] [0 9] [0 9]]
115+
116+
prims[index] = gg.vexs[start]
117+
index++
118+
119+
//next vex
120+
for i := 0; i < gg.vexnum; i++ {
121+
weights[i][0] = start //k
122+
weights[i][1] = gg.matrix[start][i] //v
123+
}
124+
125+
//delete vex
126+
weights[start][1] = 0
127+
128+
for i := 0; i < gg.vexnum; i++ {
129+
//fmt.Println(weights)
130+
if start == i {
131+
continue
132+
}
133+
134+
min := MAX_VALUE
135+
next := 0
136+
for j := 0; j < gg.vexnum; j++ {
137+
if weights[j][1] != 0 && weights[j][1] < min {
138+
min = weights[j][1]
139+
next = j
140+
}
141+
}
112142

143+
fmt.Println(gg.vexs[weights[next][0]], gg.vexs[next], "权重", weights[next][1])
144+
sum += weights[next][1]
145+
prims[index] = gg.vexs[next]
146+
index++
147+
148+
//delete vex
149+
weights[next][1] = 0
150+
151+
//update
152+
for j := 0; j < gg.vexnum; j++ {
153+
if weights[j][1] != 0 && gg.matrix[next][j] < weights[j][1] {
154+
weights[j][1] = gg.matrix[next][j]
155+
weights[j][0] = next
156+
}
157+
}
158+
}
159+
160+
fmt.Println("sum:", sum)
161+
fmt.Println(prims)
162+
}
163+
164+
func get_position(gg *Graph, ch string) int {
165+
for i := 0; i < gg.vexnum; i++ {
166+
if gg.vexs[i] == ch {
167+
return i
168+
}
169+
}
170+
return -1
113171
}

0 commit comments

Comments
 (0)