Prim算法求最小生成树。
#include <stdio.h>
#define MaxN 105
#define INF 100005
long a[MaxN][MaxN];
long Prim(int n);
int main()
{
int N;
int i, j;
//freopen("data.in", "rb", stdin);
while(scanf("%d", &N) != EOF) {
for(i = 0; i < N; i++)
for(j = 0; j < N; j++)
scanf("%ld", &a[i][j]);
printf("%ld\n", Prim(N));
}
return 0;
}
long Prim(int n)
{
int i, j, v;
int lowcost[MaxN];
int min;
long result = 0;
for(i = 0; i < n; i++)
lowcost[i] = a[0][i];
for(i = 0; i < n; i++) {
min = INF;
for(j = 0; j < n; j++) {
if(lowcost[j] != 0 && lowcost[j] < min) {
min = lowcost[j];
v = j;
}
}
result += lowcost[v];
lowcost[v] = 0;
for(j = 0; j < n; j++)
if(a[v][j] != 0 && lowcost[j] > a[v][j])
lowcost[j] = a[v][j];
}
return result;
}