Pagini recente » Cod sursa (job #1869575) | Cod sursa (job #1205257) | Cod sursa (job #672911) | Cod sursa (job #1944273) | Cod sursa (job #1116552)
#include <fstream>
#include <vector>
inline bool free(const short &i, const short &j, const short &n,
const std::vector<bool> &col,
const std::vector<bool> &prd,
const std::vector<bool> &secd){
return !(col[j]||prd[n+i-j]||secd[i+j]);
}
int main(){
std::ifstream fin("damesah.in");
std::ofstream fout("damesah.out");
short n; fin>>n;
unsigned modalitati=0;
std::vector<bool> col(n,false),prd(2*n,false),secd(2*n,false);
std::vector<short> k(n,-1);
short i=0;
while(i>-1){
bool cont=true;
if(k[i]==n-1){
k[i]=-1;
col[n-1]=false;
prd[i+1]=false;
secd[i+n-1]=false;
cont=false;
--i;
}
else{
if(k[i]!=-1){ col[k[i]]=false; secd[i+k[i]]=false; prd[n+i-k[i]]=false; }
short j=-1;
for(short j2=k[i]+1;j2<n;++j2)
if(free(i,j2,n,col,prd,secd)){ j=j2; break; }
if(j==-1){ k[i]=-1; --i; cont=false; }
else{ k[i]=j; col[j]=true; secd[i+j]=true; prd[n+i-j]=true; }
}
if(cont){
if(i==n-1){
if(modalitati==0){
for(short i=0;i<n;++i) fout<<k[i]+1<<' ';
fout<<'\n';
}
++modalitati;
}
else ++i;
}
}
fout<<modalitati<<'\n';
}