Playground
#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; }
Input data
Program output
Execute
Language: ????????? | Memory: ???? KB | Time: ??? ms
Nothing has been executed, yet!