Cod sursa(job #1100887)

Utilizator alexandru70Ungurianu Alexandru alexandru70 Data 7 februarie 2014 16:45:36
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;
ifstream in("damesah.in");
ofstream out("damesah.out");

typedef vector<int> vec_i;
typedef vector<bool> vec_b;

vec_i sol;
vec_b colOcup;
size_t n,solCount;

bool isSafe(int pI, int pJ) {
	if(colOcup[pJ])return false;
	for(int i = 0; i < pI; ++i)
		if(pI-i == abs(pJ - sol[i])) {
			return false;
		}
	return true;
}

void printSol() {
	for(size_t i = 0; i < n; ++i)
		out << sol[i]+1 << ' ';
	out << '\n';
}

void solve(size_t lvl) {
	if(lvl==n) { 
		if(solCount == 0)
			printSol();
		solCount++;
		return;
	}
	for(size_t i = 0; i < n; ++i) {
		if(isSafe(lvl,i)) {
			sol[lvl] = i;
			colOcup[i] = true;
			solve(lvl+1);
			colOcup[i] = false;
		}
	}
}

int main() {
	in >> n;
	sol.resize(n);
	colOcup.resize(n,false);
	solve(0);
	out << solCount << '\n';
}