Advertisement
Five_NT

Circuit hamiltonian

May 27th, 2016
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.99 KB | None | 0 0
  1. //
  2. #include<fstream>
  3. #include<iostream>
  4.  
  5. using namespace std;
  6.  
  7. int a[50][50], i, j, k, x[50], n, sol;
  8.  
  9. void citire()
  10. {
  11.     ifstream f("date.in");
  12.     f>>n;
  13.     for(i=1; i<=n; i++)
  14.         for(j=1; j<=n; j++)
  15.             f>>a[i][j];
  16.     f.close();
  17. }
  18.  
  19. int cont(int k)
  20. {
  21.     int i;
  22.     for(i=1; i<k; i++)
  23.         if(x[i]==x[k])
  24.             return 0;
  25.     if(k>1)
  26.         if(a[x[k]][x[k-1]]==0)
  27.             return 0;
  28.     if(k==n)
  29.         if(a[x[n]][x[1]]==3)
  30.             return 0;
  31.     return 1;
  32. }
  33. void afis()
  34. {
  35.     for(i=1; i<=n; i++)
  36.         cout<<x[i]<<" ";
  37.     cout<<x[1]<<'\n';
  38. }
  39. void back()
  40. {
  41.     int k=1;
  42.     x[k]=0;
  43.     do
  44.     {
  45.         while(x[k]<n)
  46.         {
  47.             x[k]++;
  48.             if(cont(k))
  49.                 if(k==n)
  50.                 {
  51.                     sol=1;
  52.                     afis();
  53.                     break;
  54.                 }
  55.                 else
  56.                 {
  57.                     k++;
  58.                     x[k]=0;
  59.                 }
  60.             if(sol)
  61.                 break;
  62.         }
  63.         k--;
  64.     }
  65.     while(k);
  66. }
  67. int main()
  68. {
  69.     citire();
  70.     back();
  71.     if(!sol)
  72.         cout << "Nu avem niciun circuit hamiltonian.";
  73.  
  74.     return 0;
  75. }
  76. // Exemplu:
  77. /*
  78. 6
  79. 0 1 0 1 0 1
  80. 1 0 1 1 1 0
  81. 0 1 0 1 0 1
  82. 1 1 1 0 1 0
  83. 0 1 0 1 0 1
  84. 1 0 1 0 0 1
  85. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement