@@ -13,7 +13,7 @@ const MAX_VALUE int = 9
1313func 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