You are on page 1of 2

#include <iostream>

#include <vector>
using namespace std;

int counter = 0;

bool attacks(pair<int, int> queen1, pair<int, int> queen2)


{
if(queen1.first == queen2.first)
{
//napad od ist red
return true;
}
if(queen1.second == queen2.second)
{
//napad od ista kolona
return true;
}
if(queen1.first - queen1.second == queen2.first - queen2.second)
{
//napad od dijagonala
return true;
}
if(queen1.first + queen1.second == queen2.first + queen2.second)
{
//napad od antidijagonala
return true;
}
//nema nikakov napad
return false;
}
void create(vector<pair<int, int> > queens, int current)
{
if (current > 8)
{
//8 kralici se vekje namesteni
//izbroi go ova kako edno reshenie
counter++;
return;
}
else
{
//postavi ja kralicata vo sledniot red
int row = current;
//odberi ja kolonata
for(int column=1; column <= 8; column++)
{
Pair<int, int> newQueen = make_pair(row, column);
//proveri dali e napadnata od nekoja vekje postavena kralica?
bool attacked = false;
for(int i=1; i < current; i++)
{
if (attacks(queens[i], newQueen))
{
attacked = true;
}
}
if(!attacked)
{
//rekurziven povik za postavuvanje na slednata kralica
queens[current] = newQueen;
create(queens, current + 1);
}
}
}
}
int main()
{
vector<pair<int, int> > queens;
queens.resize(9); //kje koristime indeksi od (1-8), za poednostaven
kod
create(queens, 1);
cout << counter << endl;
return 0;
}

You might also like