Pagini recente » Cod sursa (job #1599674) | Cod sursa (job #1939021) | Rating ilinca botusan (sugarmood) | Cod sursa (job #712511) | Cod sursa (job #2815815)
#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[15];
bool eValid(int lin,int col)
{
/* //verific linia de mai sus daca am dama
for(int i=lin-1; i>0; i--)
{
if(mat[i][col]==true)
{
return true;
}
}*/
//acum verific pe diag sec
int i=lin-1,j=col-1;
while(i>0 && j>0)
{
if(mat[i][j]==true)
{
return true;
}
i--;
j--;
}
//verific pe col princ
i=lin-1,j=col+1;
while(i>0 && j<n+1)
{
if(mat[i][j]==true)
{
return true;
}
i--;
j++;
}
return false;
}
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++)
{
if(!amLin[i] && !eValid(k,i))
{
mat[k][i]=true;
dame[k]=i;
amLin[i]=true;
backtrack(k+1);
mat[k][i]=false;
amLin[i]=false;
}
}
}
int main()
{
fin>>n;
backtrack(1);
for(int i=1; i<=n; i++)
{
fout<<dameSol[i]<<" ";
}
fout<<"\n"<<sol;
return 0;
}