Pagini recente » Cod sursa (job #1023481) | Cod sursa (job #965044) | Cod sursa (job #1173913) | Cod sursa (job #2642852) | Cod sursa (job #2815928)
#include <fstream>
#include <queue>
#include <algorithm>
using namespace std;
ifstream fin ("damesah.in");
ofstream fout ("damesah.out");
int n;
long long int sol;
int dameSol[15];
int dame[15];
bool mat[15][15],amLin[20],amDiagPrinc[50],amDiagSec[50];
void backtrack(int k)
{
if(k>n)
{
//imi iau solutia
sol++;
if(sol==1)
{
for(int i=1; i<=n; i++)
{
dameSol[i]=dame[i];
}
}
return;
}
//incerc sa gasesc o coloana unde sa pun dama
for(int i=1; i<=n; i++)
{
int lin=k,col=i;
if(!amDiagPrinc[lin+n-col] && !amDiagSec[lin+col-1] && !amLin[i])
{
mat[k][i]=true;
dame[k]=i;
amLin[i]=true;
amDiagPrinc[lin+n-col]=true;
amDiagSec[lin+col-1]=true;
backtrack(k+1);
mat[k][i]=false;
amLin[i]=false;
amDiagPrinc[lin+n-col]=false;
amDiagSec[lin+col-1]=false;
}
}
}
int main()
{
fin>>n;
backtrack(1);
for(int i=1; i<=n; i++)
{
fout<<dameSol[i]<<" ";
}
fout<<"\n"<<sol;
return 0;
}