Cod sursa(job #2603484)

Utilizator MarcGrecMarc Grec MarcGrec Data 20 aprilie 2020 10:21:39
Problema Problema Damelor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#define MAX_N 13

#include <fstream>
using namespace std;

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

int n, r, R[MAX_N + 1];
bool L[MAX_N + 1], C[MAX_N + 1], P[(2 * MAX_N) + 1], S[(2 * MAX_N) + 1];

bool Ok(int i, int j);
void Regina(int i, int j, bool pus);
void Back(int linie);

int main()
{
	fin >> n;
	
	Back(1);
	
	fout << r;
	
	fin.close();
	fout.close();
	return 0;
}

bool Ok(int i, int j)
{
	return !(L[i] || C[j] || P[MAX_N + j - i +  1] || S[j + i - 1]);
}

void Regina(int i, int j, bool pus)
{
	L[i] = pus;
	C[j] = pus;
	
	P[MAX_N + j - i + 1] = pus;
	S[j + i - 1]         = pus;
}

void Back(int linie)
{
	if (linie > n)
	{
		if (r == 0)
		{
			for (int i = 1; i <= n; ++i)
			{
				fout << R[i] << ' ';
			}
			fout << '\n';
		}
		
		++r;
		return;
	}
	
	for (int j = 1; j <= n; ++j)
	{
		R[linie] = j;
		if (Ok(linie, j))
		{
			Regina(linie, j, true);
			Back(linie + 1);
			Regina(linie, j, false);
		}
	}
}