Cod sursa(job #1718809)

Utilizator TwoOfDiamondsDaniel Alexandru Radu TwoOfDiamonds Data 19 iunie 2016 10:20:04
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.66 kb
#include <fstream>
#include <iostream>

using namespace std;

ofstream out("damesah.out");
short matrix[14][14];
short cols[14];
short decided_pos[14];
bool wrote = false;
int nr_sol = 0;
int max_linii;

void print_matrix()
{

	return;

	for (int i = 0; i < max_linii; i++)
	{
		for (int j = 0; j < max_linii; j++)
			cout << matrix[i][j] << " ";

		cout << endl;
	}

	cout << endl;
}

void modify_spaces(bool added, int linie, int col)
{
	int q = added ? 1 : -1;

	for (int i = 0; i < max_linii; i++)
	{
		matrix[i][col] += q;
		matrix[linie][i] += q;
	}


	print_matrix();

	int i = linie, j = col;

	while (i < max_linii && j < max_linii)
	{
		matrix[i][j] += q;
		i++, j++;
	}

	i = linie, j = col;

	while (i < max_linii && j >= 0)
	{
		matrix[i][j] += q;
		i++, j--;
	}

	i = linie, j = col;

	while (i >= 0 && j < max_linii)
	{
		matrix[i][j] += q;
		i--, j++;
	}

	i = linie, j = col;

	while (i >= 0 && j >= 0)
	{
		matrix[i][j] += q;
		i--, j--;
	}

	print_matrix();
}

void bkt(int linie)
{
	int col = -1;
	if (linie >= max_linii)
	{
		if (!wrote)
		{
			for (int i = 0; i < max_linii; i++)
			{
				out << decided_pos[i] + 1 << " ";
			}
			out << endl;
			wrote = true;
		}

		nr_sol++;

		return;
	}

	while (true)
	{
		col++;

		if (col < max_linii && matrix[linie][col] == 0)
		{
			modify_spaces(true, linie, col);
			decided_pos[linie] = col;
			bkt(linie + 1);
			modify_spaces(false, linie, col);
		}
		else if (col >= max_linii)
			return;
	}

}

int main()
{
	ifstream in("damesah.in");
	in >> max_linii;

	bkt(0);

	out << nr_sol << endl;

	return 0;
}