一前一直用kruskal算法,刚学的prim,找道水题练练手。。
prim的模板。。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int map[110][110],f[110],d[110];
int n,sum;
void prim()
{
int i,j,k;
sum=0;
memset(f,0,sizeof(f));
f[1]=1;
for(i=2;i<=n;i++)
d[i]=map[1][i];
d[1]=0;
for(i=1;i<n;i++){
int min=99999999;
for(j=2;j<=n;j++)
if(f[j]==0 && d[j]<min)
min=d[j],k=j;
f[k]=1;
sum+=min;
for(j=2;j<=n;j++){
if(f[j]==0 && map[k][j]<d[j])
d[j]=map[k][j];
}
}
}
int main()
{
int i,j,k;
while(scanf("%d",&n),n){
int t=n*(n-1)/2;
while(t--){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
map[a][b]=c;
map[b][a]=c;
}
for(i=0;i<=n;i++)
map[i][i]=0;
prim();
printf("%d\n",sum);
}
}