1 #include<stdio.h>
2 #define MAXV 20
3 #define INF 32767
4 typedef struct
5 {
6 int edges[MAXV][MAXV];
7 int n;
8 int e;
9 } MatGraph;
10
11 void CreateMat(MatGraph &g, int A[MAXV][MAXV], int n, int e)
12 {
13 for (int i = 0; i < n; ++i)
14 for (int j = 0; j < n; ++j)
15 g.edges[i][j] = A[i][j];
16 g.n = n;
17 g.e = e;
18 }
19
20 void Prim(MatGraph g, int v)
21 {
22 int lowcost[MAXV], closest[MAXV], k;
23 int min;
24 for (int i = 0; i < g.n; ++i)
25 {
26 lowcost[i] = g.edges[v][i];
27 closest[i] = v;
28 }
29 for (int i = 0; i < g.n - 1; ++i)
30 {
31 min = INF;
32 for (int j = 0; j < g.n; ++j)
33 if (lowcost[j] != 0 && lowcost[j] < min)
34 {
35 min = lowcost[j];
36 k = j;
37 }
38 printf("(%d, %d)的权为:%d \n", closest[k], k, min);
39 lowcost[k] = 0;
40 for (int j = 0; j < g.n; ++j)
41 if (g.edges[k][j] < lowcost[j])
42 {
43 lowcost[j] = g.edges[k][j];
44 closest[j] = k;
45 }
46 }
47 }
48
49 int main()
50 {
51 MatGraph g;
52 int A[MAXV][MAXV] = { { 0, 5, 8, 7, INF, 3 },
53 { 5, 0, 4, INF, INF, INF },
54 { 8, 4, 0, 5, INF, 9 },
55 { 7, INF, 5, 0, 5, 6 },
56 { INF, INF, INF, 5, 0, 1 },
57 { 3, INF, 9 ,6, 1, 0 } };
58 int n = 6, e = 10;
59 CreateMat(g, A, n, e);
60 Prim(g, 0);
61 return 0;
62 }