Advertisement
J00ker

Untitled

Oct 2nd, 2015
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int st[10], a[10], n, nr;
  7.  
  8. void Init(int k)
  9. {
  10.     st[k] = 0;
  11. }
  12.  
  13. int Succesor(int k)
  14. {
  15.     if(st[k] < n)
  16.     {
  17.         st[k]++;
  18.         return 1;
  19.     }
  20.     return 0;
  21. }
  22.  
  23. int Valid(int k)
  24. {
  25.     for(int i = 1; i <  k; i++)
  26.         if(st[k] == st[i])
  27.             return 0;
  28.         else if((a[st[i]] == a[st[i+1]]+1) || (a[st[i]] == a[st[i+1]]-1))
  29.             return 0;
  30.     return 1;
  31. }
  32.  
  33. int Solutie(int k)
  34. {
  35.     if(k == n+1)
  36.         return 1;
  37.     return 0;
  38. }
  39.  
  40. void Citire()
  41. {
  42.     int x;
  43.     ifstream fin("shuffle.in");
  44.     fin >> n;
  45.     for(int i = 1; i <= n; i++)
  46.     {
  47.         fin >> x;
  48.         a[x] = i;
  49.     }
  50.     fin.close();
  51. }
  52.  
  53. ofstream fout("shuffle.out");
  54. void Tipar()
  55. {
  56.     for(int i = 1; i <= n; i++)
  57.         fout << st[i] << " ";
  58.     fout << "\n";
  59.  
  60. }
  61.  
  62. void backtrack(int k)
  63. {
  64.     if(Solutie(k))
  65.     {
  66.         Tipar();
  67.         nr++;
  68.     }
  69.     else
  70.     {
  71.         Init(k);
  72.         while(Succesor(k))
  73.             if(Valid(k))
  74.                 backtrack(k+1);
  75.     }
  76. }
  77.  
  78. int main()
  79. {
  80.     Citire();
  81.     backtrack(1);
  82.     if(!nr) fout << "nu exista";
  83.     return 0;
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement