Pagini recente » Cod sursa (job #3128699) | Cod sursa (job #188794) | Cod sursa (job #627794) | Cod sursa (job #2334478) | Cod sursa (job #2312159)
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
short n;
int rez;
bool M[15][15],afisare;
bool Coloana[15];
void Bkt(short),Afis();
bool Posibil(short,short);
void AfisareM(){
int i,j;
for(i=0;i<n;++i){
for(j=0;j<n;++j)fout<<M[i][j]<<' ';
fout<<'\n';
}
}
int main(){
fin>>n;
Bkt(0);
fout<<rez<<'\n';
return 0;
}
void Bkt(short x){
short i;
if(x==n){
--x;
for(i=0;i<n;++i)if(M[x][i])break;
if(Posibil(x,i)){
if(!afisare){
afisare=1;
Afis();
}++rez;
}return;
}
// AfisareM();fout<<'\n';
for(i=0;i<n;++i){
while(i<n&&Coloana[i])++i;
if(i==n)break;
if(Posibil(x,i)){
Coloana[i]=1;
M[x][i]=1;
Bkt(x+1);
Coloana[i]=0;
M[x][i]=0;
}
}
}
bool Posibil(short a,short b){
short ca=a,cb=b;
--a,--b;
while(a>=0&&b>=0){//sus
if(M[a][b])return 0;
--a,--b;
}a=ca,b=cb;
--a,++b;
while(a>=0&&b<n){
if(M[a][b])return 0;
--a,++b;
}
return 1;
}
void Afis(){
int i,j;
for(i=0;i<n;++i){
for(j=0;j<n;++j){
if(M[i][j]){
fout<<j+1<<' ';
break;
}
}
}fout<<'\n';
}