Hamiltonian

 /*HAMILTIONIAN CYCLE*/  
 #include<iostream.h>  
 #include<conio.h>  
 void hamil(int);  
 void nv(int);  
 int n=4,g[10][10],x[20];  
 void main()  
 {  
      int i,j,k=2;  
      clrscr();  
      cout<<"\n\t\t\tHAMILTIONIAN CYCLE\n";  
      cout<<"\nEnter the no. of nodes:";  
      cin>>n;  
      cout<<"\nEnter the adjacency matrix\n";  
      for(i=1;i<=n;i++)  
      {  
           for(j=1;j<=n;j++)  
           {  
                cout<<" "<<i<<","<<j<<":";  
                cin>>g[i][j];  
           }  
      }  
      for(j=2;j<=n;j++)  
           x[j]=0;  
      hamil(k);  
      getch();  
 }  
 void hamil(int k)  
 {  
      int i;  
      x[1]=1;  
      while(1)  
      {  
           nv(k);  
           if(x[k]==0)  
           {  
             getch();  
             exit(1);  
                }  
           else if(k==n)  
           {  
                cout<<"\nThe solution is:";  
                for(i=1;i<=n;i++)  
                     cout<<x[i]<<’\t’;  
             cout<<"\n";  
             cout<<"\nThe given cycle is hamiltonian";  
           }  
           else  
                hamil(k+1);  
      }  
 }  
 void nv(int k)  
 {  
      int i;  
      do  
      {  
           x[k]=(x[k]+1)%(n+1);  
           if(x[k]==0)  
                return;  
           if(g[x[k-1]][x[k]]==1)  
           {  
                for(int j=1;j<=n;j++)  
                {  
                     if(x[j]==x[k])  
                          break;  
                }  
                if(j==k)  
                {  
                     if((k<n)||((k==n)&&(g[x[n],x[1]]!=0)))  
                          return;  
                }  
           }  
      }while(1);  
 }  

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