Advertisement
Lauda

Untitled

Mar 15th, 2013
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void rotiraj90(int *ploca, int n)
  6. {
  7.     int *ploca1 = new int[n];
  8.     int c = n-1;
  9.    
  10.     for (int i=0; i<n; i++)
  11.         for (int j=0; j<n; j++)
  12.             if (ploca[j] == c)
  13.             {
  14.                 ploca1[i] = j;
  15.                 c--;
  16.                 break;
  17.             }
  18.            
  19.     for (int i=0; i<n; i++)
  20.         ploca[i] = ploca1[i];
  21.        
  22.     delete[] ploca1;
  23. }
  24.  
  25. bool compare(int *ploca1, int *ploca2, int n)
  26. {
  27.     int br = 0;
  28.     for (int i=0; i<n; i++)
  29.     {
  30.         if (ploca1[i] > ploca2[i])
  31.             return true;
  32.         else if (ploca1[i] == ploca2[i])
  33.         {
  34.             br++;
  35.             if (br == n)
  36.                 return true;
  37.         }
  38.         else if (ploca1[i] < ploca2[i])
  39.             return false;
  40.     }
  41.    
  42.     return false;
  43. }
  44.  
  45. bool rotiraj3(int *ploca1, int *ploca2, int n)
  46. {
  47.     for (int i=0; i<3; i++)
  48.     {
  49.         rotiraj90(ploca2, n); // Rotiramo 3 puta po 90!
  50.    
  51.     if (!compare(ploca1, ploca2, n))
  52.         return false;
  53.     }
  54.    
  55.     return true;
  56. }
  57.  
  58. bool horizontalnoRotiranje(int *ploca1, int *ploca2, int n)
  59. {
  60.     int i = 0, sort = 0, b = n-1;
  61.    
  62.     while (i < b)
  63.     {
  64.         sort = ploca2[i];
  65.         ploca2[i] = ploca2[b];
  66.         ploca2[b] = sort;
  67.         i++;
  68.         b--;
  69.     }
  70.    
  71.     if (!compare(ploca1, ploca2, n))
  72.         return false;
  73.    
  74.     if (!rotiraj3(ploca1, ploca2, n))
  75.         return false;
  76.    
  77.     return true;
  78. }
  79.  
  80. bool isAttacking(int *ploca, int k)
  81. {
  82.     for (int i=0; i<k; i++)
  83.         if ((ploca[i] == ploca[k]) || (abs(ploca[i] - ploca[k])) == (k-i))
  84.             return false;
  85.     return true;
  86. }
  87.  
  88. bool hasQueen(int *ploca, int k)
  89. {
  90.     return false;
  91. }
  92.  
  93.  
  94. void postaviQ(int *ploca, int vel, int *brR, int k=0)
  95. {
  96.     if (k != vel)
  97.     {
  98.         for (int i=0; i<vel; i++)
  99.         {
  100.             ploca[k] = i;
  101.             if (isAttacking(ploca, k))
  102.                 postaviQ(ploca, vel, brR, k+1);
  103.         }
  104.     }
  105.     else
  106.     {
  107.         int *ploca1 = new int[vel];
  108.         for (int i=0; i<vel; i++)
  109.             ploca1[i] = ploca[i];
  110.  
  111.         if ((rotiraj3(ploca, ploca1, vel)) && (horizontalnoRotiranje(ploca, ploca1, vel)))
  112.             (*brR)++;
  113.         delete[] ploca1;
  114.     }
  115. }
  116.  
  117. int main(int argc, char *argv[])
  118. {
  119.     int unos = 0;
  120.     int brR = 0;
  121.    
  122.     if (argc != 2)
  123.     {
  124.         do
  125.         {
  126.             cout << "Unesite dimenziju: " << endl;
  127.             cin >> unos;
  128.            
  129.             if ((unos < 1) || (unos > 15))
  130.                 cout << "Preporucena dimenzija je 1 - 15!" << endl;
  131.         } while ((unos < 1) || (unos > 15));
  132.     }
  133.     else
  134.         unos = atoi(argv[1]);
  135.    
  136.     cout << "Dimenzija ploce je: " << unos << "x" << unos << endl;
  137.    
  138.     int *ploca = new int[unos];
  139.     for (int i=0; i<unos; i++)
  140.         ploca[i] = 0;
  141.        
  142.     postaviQ(ploca, unos, &brR);
  143.     cout << "Broj svih mogucih rijesenja je: " << brR << endl;
  144.    
  145.     delete[] ploca;
  146.     brR = 0;
  147.    
  148.     system("pause");
  149.     return 0;
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement