Pagini recente » Cod sursa (job #1917914) | Cod sursa (job #2420185)
#include <bits/stdc++.h>
using namespace std;
int n,rs;
int a[100][100];
bool b[100][100];
bool prima=0;
ofstream out("damesah.out");
void back(int lvl,int rand){
if (lvl==n+1){
if (prima==0){
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++) if (b[i][j]!=0) {out<<j<<' ';break;}
}
prima=1;
out<<'\n';
}
rs++;
}
else{
for (int i=rand;i<=n;i++) for (int j=1;j<=n;j++) if (b[i][j]==0 && a[i][j]==0){
//toate pozitiile posibile
b[i][j]=1;
for (int k=1;k<=i-1;k++) if (b[i-k][j]==0) a[i-k][j]++;
for (int k=1;k<=n-i;k++) if (b[i+k][j]==0) a[i+k][j]++;
for (int k=1;k<=j-1;k++) if (b[i][j-k]==0) a[i][j-k]++;
for (int k=1;k<=n-j;k++) if (b[i][j+k]==0) a[i][j+k]++;
for (int k=1;k<=min(i,j)-1;k++) if (b[i-k][j-k]==0) a[i-k][j-k]++;
for (int k=1;k<=min(n-i,n-j);k++) if (b[i+k][j+k]==0) a[i+k][j+k]++;
for (int k=1;k<=min(i-1,n-j);k++) if (b[i-k][j+k]==0) a[i-k][j+k]++;
for (int k=1;k<=min(n-i,j-1);k++) if (b[i+k][j-k]==0) a[i+k][j-k]++;
back(lvl+1,i+1);
b[i][j]=0;
for (int k=1;k<=i-1;k++) if (b[i-k][j]==0) a[i-k][j]--;
for (int k=1;k<=n-i;k++) if (b[i+k][j]==0) a[i+k][j]--;
for (int k=1;k<=j-1;k++) if (b[i][j-k]==0) a[i][j-k]--;
for (int k=1;k<=n-j;k++) if (b[i][j+k]==0) a[i][j+k]--;
for (int k=1;k<=min(i,j)-1;k++) if (b[i-k][j-k]==0) a[i-k][j-k]--;
for (int k=1;k<=min(n-i,n-j);k++) if (b[i+k][j+k]==0) a[i+k][j+k]--;
for (int k=1;k<=min(i-1,n-j);k++) if (b[i-k][j+k]==0) a[i-k][j+k]--;
for (int k=1;k<=min(n-i,j-1);k++) if (b[i+k][j-k]==0) a[i+k][j-k]--;
}
}
}
int main(){
ifstream cin("damesah.in");
cin>>n;
back(1,1);
out<<rs;
}