Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- void rotiraj90(int *ploca, int n)
- {
- int *ploca1 = new int[n];
- int c = n-1;
- for (int i=0; i<n; i++)
- for (int j=0; j<n; j++)
- if (ploca[j] == c)
- {
- ploca1[i] = j;
- c--;
- break;
- }
- for (int i=0; i<n; i++)
- ploca[i] = ploca1[i];
- delete[] ploca1;
- }
- bool compare(int *ploca1, int *ploca2, int n)
- {
- int br = 0;
- for (int i=0; i<n; i++)
- {
- if (ploca1[i] > ploca2[i])
- return true;
- else if (ploca1[i] == ploca2[i])
- {
- br++;
- if (br == n)
- return true;
- }
- else if (ploca1[i] < ploca2[i])
- return false;
- }
- return false;
- }
- bool rotiraj3(int *ploca1, int *ploca2, int n)
- {
- for (int i=0; i<3; i++)
- {
- rotiraj90(ploca2, n); // Rotiramo 3 puta po 90!
- if (!compare(ploca1, ploca2, n))
- return false;
- }
- return true;
- }
- bool horizontalnoRotiranje(int *ploca1, int *ploca2, int n)
- {
- int i = 0, sort = 0, b = n-1;
- while (i < b)
- {
- sort = ploca2[i];
- ploca2[i] = ploca2[b];
- ploca2[b] = sort;
- i++;
- b--;
- }
- if (!compare(ploca1, ploca2, n))
- return false;
- if (!rotiraj3(ploca1, ploca2, n))
- return false;
- return true;
- }
- bool isAttacking(int *ploca, int k)
- {
- for (int i=0; i<k; i++)
- if ((ploca[i] == ploca[k]) || (abs(ploca[i] - ploca[k])) == (k-i))
- return false;
- return true;
- }
- bool hasQueen(int *ploca, int k)
- {
- return false;
- }
- void postaviQ(int *ploca, int vel, int *brR, int k=0)
- {
- if (k != vel)
- {
- for (int i=0; i<vel; i++)
- {
- ploca[k] = i;
- if (isAttacking(ploca, k))
- postaviQ(ploca, vel, brR, k+1);
- }
- }
- else
- {
- int *ploca1 = new int[vel];
- for (int i=0; i<vel; i++)
- ploca1[i] = ploca[i];
- if ((rotiraj3(ploca, ploca1, vel)) && (horizontalnoRotiranje(ploca, ploca1, vel)))
- (*brR)++;
- delete[] ploca1;
- }
- }
- int main(int argc, char *argv[])
- {
- int unos = 0;
- int brR = 0;
- if (argc != 2)
- {
- do
- {
- cout << "Unesite dimenziju: " << endl;
- cin >> unos;
- if ((unos < 1) || (unos > 15))
- cout << "Preporucena dimenzija je 1 - 15!" << endl;
- } while ((unos < 1) || (unos > 15));
- }
- else
- unos = atoi(argv[1]);
- cout << "Dimenzija ploce je: " << unos << "x" << unos << endl;
- int *ploca = new int[unos];
- for (int i=0; i<unos; i++)
- ploca[i] = 0;
- postaviQ(ploca, unos, &brR);
- cout << "Broj svih mogucih rijesenja je: " << brR << endl;
- delete[] ploca;
- brR = 0;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement