Cod sursa(job #1486944)

Utilizator o_micBianca Costin o_mic Data 15 septembrie 2015 19:24:42
Problema Problema Damelor Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

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

int find_sol(int n, vector <int> col, vector <int> diag1, vector <int> diag2, vector<int> sol) {
	int k = sol.size();
	if(n == k){
		if(!ok){
			for(int i = 0; i < sol.size(); ++i)
				fout << sol[i] << " ";
			fout << '\n';
			ok = 1;
		}
		return 1;
	}
	int res = 0;
	for(int i = 0; i < n; ++i)
		if(!col[i] && !diag1[n + k - i] && !diag2[i+k]){
			col[i] = 1;
			diag1[n + k - i] = 1;
			diag2[i+k] = 1;
			sol.push_back(i+1);
			res += find_sol(n, col, diag1, diag2, sol);
			sol.pop_back();
			col[i] = 0;
			diag1[n + k - i] = 0;
			diag2[i+k] = 0;
		}
	return res;
}

int main() {
	int n;
	fin >> n;
	vector <int> col(n, 0), diag1(2*n, 0), diag2(2*n, 0), sol;
	ok = 0;
	fout << find_sol(n, col, diag1, diag2, sol);
	return 0;
}