模板题....用Prim写的代码如下
可能有点挫,勿怪.....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 55
const int inf=99999;
int vex[N][N];
void output(int n)
{
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
printf("%d ",vex[i][j]);
printf("\n");
}
}
int main()
{
int numVex,routes;
int i,j;
int maxAns=0;
int cost;
int indexI,indexJ;
while(scanf("%d",&numVex) && numVex!=0){
scanf("%d",&routes);
for(i=1;i<=numVex;i++)
for(j=1;j<=numVex;j++){
if(i!=j)
vex[i][j]=inf;
else
vex[i][j]=0;
}
maxAns=0;
for(i=1;i<=routes;i++){
scanf("%d %d %d",&indexI,&indexJ,&cost);
if(cost<vex[indexI][indexJ])
vex[indexI][indexJ]=vex[indexJ][indexI]=cost;
}
// output(numVex);
for(j=2;j<=numVex;j++){
int min=inf;
int index=0;
for(i=1;i<=numVex;i++){
if(vex[1][i]==inf || vex[1][i]==0)continue;
if(vex[1][i]<min){
min=vex[1][i];
index=i;
}
}
maxAns+=vex[1][index];
for(i=1;i<=numVex;i++)
vex[1][i]=vex[1][i]<vex[index][i]?vex[1][i]:vex[index][i];
}
printf("%d\n",maxAns);
}
return 0;
}