Kruskal-Greedy

 #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();  
 }  

Share This!


No comments:

Post a Comment

Code Of The day - Suggest An Output For The Snippet

  #include<stdio.h>   
  int main()   
  {   
   float a=3.15529;   
   printf("%2.1f\n", a);   
   return 0;   
  }   
· A Code Archive - code1archive