#include<iostream.h>
#include<conio.h>
int parent[100];
int find1(int i)
{
while(parent[i]>=0)
i=parent[i];
return(i);
}
void union1(int x1,int x2)
{
parent[x1]=x2;
}
void main()
{
int a[20][20],x[20],y[20],t[10][10],z[20];
int mincost,n1,r,te,n,u,v,i,j,k;
clrscr();
cout<<"\n Enter the number of nodes : ";
cin>>n;
cout<<"\n\t ENTER THE COST OF ADJACENCY MATRIX ";
cout<<"\n\t(If no edges exist enter 9999)\n";
for(i=1;i<n;i++)
{
for(j=i+1;j<=n;j++)
{
a[i][j]=0;
cout<<"\na["<<i<<"]["<<j<<"] = ";
cin>>a[i][j];
}
}
k=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if((i<j)&&(a[i][j]!=0))
{
x[k]=i;
y[k]=j;
z[k]=a[i][j];
k++;
}
}
}
for(i=1;i<k;i++)
{
for(j=1;j<k;j++)
{
if(i<j)
{
if(z[i]>z[j])
{
te=z[i];z[i]=z[j];z[j]=te;
te=x[i];x[i]=x[j];x[j]=te;
te=y[i];y[i]=y[j];y[j]=te;
}
}
}
}
n1=k-1;
for(i=1;i<=n;i++)
parent[i]=-1;
r=1;
mincost=0;
i=0;
while((i<n-1)&&(r!=n1))
{
u=x[r];v=y[r];j=find1(u);
k=find1(v);
if(j!=k)
{
i=i+1;
t[i][1]=u;
t[i][2]=v;
mincost=mincost+z[r];
union1(j,k);
}
r++;
}
if(i!=n-1)
cout<<"NO SPANNING TREE\n";
else
{
cout<<"SPANNING TREE\n";
for(i=1;i<n;i++)
cout<<"\t"<<t[i][1]<<"--->"<<t[i][2];
}
cout<<"\nTOTAL MINCOST = "<<mincost;
getch();
}
Kruskal-Greedy
Share This!
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment