Pagini recente » Cod sursa (job #1181215) | Cod sursa (job #1328993) | Cod sursa (job #1192978) | Cod sursa (job #1575987) | Cod sursa (job #1204368)
#include <fstream>
using namespace std;
ifstream fin("damesah.in");
ofstream fout("damesah.out");
int n, nr, k, x[20];
bool c[20], dp[40], ds[40];
inline void afis()
{
nr++;
if (nr == 1)
{
for (int i=1; i<=n; i++) fout << x[i] << ' ';
}
}
inline int cont (int k)
{
if (c[x[k]]) return 0;
if (dp[n + k - x[k]]) return 0;
if (ds[k + x[k]]) return 0;
return 1;
}
inline int backtrack(int k)
{
for (int i=1; i<=n; i++)
{
x[k] = i;
if (cont (k))
{
c[x[k]] = dp[n + k - x[k]] = ds[k + x[k]] = 1;
if (k == n) afis();
else backtrack(k + 1);
c[x[k]] = dp[n + k - x[k]] = ds[k + x[k]] = 0;
}
}
}
int main()
{
fin >> n;
backtrack(1);
fout << '\n' << nr << '\n';
fout.close();
return 0;
}