Pagini recente » Cod sursa (job #1288561) | Cod sursa (job #1753743) | Cod sursa (job #847210) | Cod sursa (job #1666326) | Cod sursa (job #1291906)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream is("damesah.in");
ofstream os("damesah.out");
int n;
int x[20];
bool l[20], c[20], dp[40], ds[40];
int cnt;
void Back(int k);
bool Ok(int k);
void Write();
int main()
{
is >> n;
Back(1);
os << cnt;
is.close();
os.close();
return 0;
}
void Back(int k)
{
if(k > n)
{
if(cnt == 0) Write();
cnt++;
return;
}
for(int i = 1; i <= n; ++i)
{
x[k] = i;
if(Ok(k))
{
l[x[k]] = 1;
dp[n + k - x[k] + 1] = 1;
ds[k + x[k] - 1] = 1;
Back(k+1);
l[i] = 0;
dp[n + k - x[k] + 1] = 0;
ds[i + k - 1] = 0;
}
}
}
bool Ok(int k)
{
if(l[x[k]] == 1) return false;
if(dp[n + k - x[k] + 1] == 1) return false;
if(ds[k + x[k] - 1] == 1) return false;
return true;
}
void Write()
{
for(int i =1; i <= n; ++i)
os << x[i] << ' ';
os << '\n';
return;
}