#include
#define INF 32000
void main()
{
FILE *fp,*fo;
int arr[15][15],n,edge,i,j,a,b,c;
int tree[10],E[15][5],t[10][5],k=1,l,mincost=0;
fp=freopen("c:\\work\\kruskal.in","r",stdin);
fo=freopen("c:\\work\\kruskal.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==j) arr[i][j]=0; else arr[i][j]=INF; } } scanf("%d",&edge); for(i=1;i<=edge;i++) { scanf("%d%d%d",&a,&b,&c); E[i][1]=a;E[i][2]=b;E[i][3]=c; arr[a][b]=c; arr[b][a]=c; } /* for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%6d",arr[i][j]); printf("\n"); }*/ for(i=1;i<=n;i++) tree[i]=i; for(i=1;i<=edge;i++) { for(j=i+1;j<=edge;j++) { if(E[i][3]>E[j][3])
{
int tem2=E[i][3];
int tem1=E[i][2];
int tem=E[i][1];
E[i][3]=E[j][3];
E[i][2]=E[j][2];
E[i][1]=E[j][1];
E[j][3]=tem2;
E[j][2]=tem1;
E[j][1]=tem;
}
}
}
int op=n+1;
for(i=1;i<=edge;i++)
{
int an=tree[E[i][1]];
int bn=tree[E[i][2]];
if(tree[E[i][1]]!=tree[E[i][2]])
{
for(j=1;j<=n;j++)
if((an==tree[j])||(bn==tree[j]))
tree[j]=op;
tree[E[i][1]]=op;
tree[E[i][2]]=op;
mincost=mincost+E[i][3];
t[k][1]=E[i][1];
t[k][2]=E[i][2];
k++;
op++;
}
}
printf("The node && edge value of spanning Tree=\n");
for(i=1;i
{
printf("%d , %d=%d",t[i][1],t[i][2],arr[t[i][1]][t[i][2]]);
printf("\n");
}
printf("The minimum cost= %d",mincost);
}
0 comments:
Post a Comment