Cod sursa(job #2386800)

Utilizator vlad_popaVlad Popa vlad_popa Data 23 martie 2019 18:01:52
Problema Problema Damelor Scor 100
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <unordered_set>

int _count, _printed;
std::ofstream _out;
int _checkedLine[64], _checkedDiag[64];


void backtracking(std::vector<int>& d, int step, int N)
{
	if (step == N) {
		if (!_printed) {
			for (auto v : d) {
				_out << v << " ";
			}
			_out << "\n";
			_printed = 1;
		}
		++ _count;
		return;
	}
	
	for (int i = 1; i <= N; ++ i) {
		if (!_checkedLine[i] && !_checkedDiag[N+i-step] && !_checkedDiag[2*N+i+step]) {
			d[step] = i;
			
			_checkedLine[i] = 1;
			_checkedDiag[N+i-step] = 1;
			_checkedDiag[2*N+i+step] = 1;
			
			backtracking(d, step+1, N);
			
			_checkedLine[i] = 0;
			_checkedDiag[N+i-step] = 0;
			_checkedDiag[2*N+i+step] = 0;
		}	
	}
}

int main() 
{
	std::ifstream in("damesah.in");
	
	int N;
	in >> N;
	std::vector<int> d(N);
	_out = std::ofstream("damesah.out");
	
	backtracking(d, 0, N);
	_out << _count << "\n";
	
	_out.close();
	in.close();
	return 0;
}