#include <stdio.h> #define V 9 #define E 14 int p[V],r[V]; void make_set(int x) { p[x]=x; r[x]=0; } int find(int x) { int root,y,temp; y=x; while(p[y]!=y) y=p[y]; root=y;y=x; while(p[y]!=y) { temp=p[y]; p[y]=root; y=temp; } return root; } void Union(int x,int y) { int u,v; u=find(x);v=find(y); if(r[u]<=r[v]) { p[u]=v; if(r[u]==r[v]) r[v]++; } else p[v]=u; } void sort(int *u,int *v,int *w) { int i,j,k,temp; for(i=0;i<E-1;i++) { k=i; for(j=i+1;j<E;j++) { if(w[j]<w[k])k=j; if(k!=i) { temp=w[k];w[k]=w[i];w[i]=temp; temp=u[k];u[k]=u[i];u[i]=temp; temp=v[k];v[k]=v[i];v[i]=temp; } } } } void MST_kruskal(int *u,int *v,int *w) { int i; for(i=0;i<V;i++) make_set(i); sort(u,v,w); for(i=0;i<E;i++) { if(find(u[i])!=find(v[i])) { Union(u[i],v[i]); printf("%d-%d ",u[i],v[i]); } } } void main() { int w[E]={4,8,11,8,7,2,6,1,7,4,2,14,9,10}; int u[E]={0,0,1,1,7,2,8,7,2,2,6,3,3,4}; int v[E]={1,7,7,2,8,8,6,6,3,5,5,5,4,5}; MST_kruskal(u,v,w); }