Advertisement
MouseyN1

Problema reginelor backtracking

Oct 30th, 2013
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.97 KB | None | 0 0
  1. #include <fstream>
  2. #include <cmath>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. void back(int);
  7. void afisare(int);
  8. int solutie(int);
  9. int valid(int);
  10.  
  11. int n, st[100];
  12.  
  13. ifstream fin("yolo.in");
  14. ofstream fout("yolo.out");
  15.  
  16. void back(int k)
  17. {
  18.     for(int i = 1; i <= n; i++)
  19.     {
  20.         st[k] = i;
  21.         if(valid(k))
  22.         {
  23.             if(solutie(k))
  24.                 afisare(k);
  25.             else back(k + 1);
  26.         }
  27.     }
  28. }
  29.  
  30. void afisare(int k)
  31. {
  32.     for(int i = 1; i <= n; i++)
  33.     {
  34.         for(int j = 1; j <= n; j++)
  35.             if(st[i] == j)
  36.                 fout << 'd' << ' ';
  37.                 else fout << '*' << ' ';
  38.             fout << endl;
  39.     }
  40.     fout << endl;
  41. }
  42.  
  43. int valid(int k)
  44. {
  45.     for(int i = 1; i < k; i++)
  46.         if(st[k] == st[i] || abs(st[k] - st[i]) == k - i)
  47.            return 0;
  48.     return 1;
  49. }
  50.  
  51. int solutie(int k)
  52. {
  53.     return n == k;
  54. }
  55.  
  56. int main(void)
  57. {
  58.     fin >> n;
  59.     back(1);
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement