Cod sursa(job #2635716)

Utilizator sebimihMihalache Sebastian sebimih Data 15 iulie 2020 13:41:09
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream fin("damesah.in");
ofstream fout("damesah.out");

const int N = 20;

int n, CountAns, ans[N];
bool Coloana[N], DiagPrin[2 * N], DiagSec[2 * N];

void PrintAns()
{
	CountAns++;
	if (CountAns == 1)
	{
		for (int i = 0; i < n; i++)
		{
			fout << ans[i] << ' ';
		}
		fout << '\n';
	}
}

bool CanPlace(int l, int c)
{
	return !DiagPrin[n + l - c] && !DiagSec[l + c] && !Coloana[c];
}

void MarkPlaced(int l, int c, bool placed)
{
	DiagPrin[n + l - c] = DiagSec[l + c] = Coloana[c] = placed;
}

void bkt(int level)
{
	if (level == n)
	{
		PrintAns();
		return;
	}

	for (int i = 1; i <= n; i++)
	{
		if (CanPlace(level, i))
		{
			ans[level] = i;
			MarkPlaced(level, i, true);
			bkt(level + 1);
			MarkPlaced(level, i, false);
		}
	}
}

int main()
{
	fin >> n;
	bkt(0);
	fout << CountAns;
}