最小生成樹之Prim算法
代碼如下:
#include <bits/stdc++.h>
#define maxn 1005
using namespace std;
#define INF 0x3f3f3f3f
int lowcost[maxn], n, a[maxn][maxn];
int Prim(){
int ans = 0, tmp;
lowcost[0] = 0;
for ( int i = 1; i < n; i++){
lowcost[i] = a[0][i];
}
for ( int i = 1; i < n; i++){
int m = INF;
for ( int j = 0; j < n; j++){
if ( m > lowcost[j] && lowcost[j] != 0){
m = lowcost[j];
tmp = j;
}
}
ans += m;
lowcost[tmp] = 0;
for ( int j = 0; j < n; j++){
if ( lowcost[j] > a[tmp][j])
lowcost[j] = a[tmp][j];
}
}
return ans;
}
int main()
{
scanf( "%d", &n);
for ( int i = 0; i < n; i++){
for ( int j = 0; j < n; j++){
scanf( "%d", &a[i][j]);
}
}
printf( "%d\n", Prim());
return 0;
}