Pagini recente » Cod sursa (job #24131) | Cod sursa (job #2080455) | Cod sursa (job #1307241) | Cod sursa (job #1873305) | Cod sursa (job #1570281)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("damesah.in");
ofstream g("damesah.out");
int n, cont;
pair <int,int> regina[20];
void afisare()
{ //pentru a le afisa pe toate
cout<<"Avem reginele: \n";
for(int i=1;i<=n;i++)
cout<<regina[i].first<<' '<<regina[i].second<<'\n';
}
inline int mabs(int x) //inline pt optimiazare
{ if(x<0) return -x;
return x;
}
bool valid(int ri, int rj, int nivel)//ri si rj is coord reginei actuale,
{ //mergem ca la permutari, si verificam
for(int i=1;i<nivel;i++)
if(rj==regina[i].second || (mabs(ri-regina[i].first)==mabs(rj-regina[i].second)))// daca se afla pe aceeasi coloana || diag
return 0;
return 1;
}
void back(int linie)
{ if(linie==n+1)
{ //afisare();
if(cont==0)
for(int i=1;i<=n;i++)
g<<regina[i].second<<' ';
cont++;
return;
}
//incercam sa punem regina de pe linia actuala pe fiecare coloana pe care se poate(valid)
for(int coloana=1; coloana<=n;coloana++)
if(valid(linie, coloana, linie))
{ regina[linie]=make_pair(linie, coloana);
back(linie+1);
}
}
int main()
{ f>>n;
back(1);
g<<'\n'<<cont;
return 0;
}