Cod sursa(job #1718924)

Utilizator TwoOfDiamondsDaniel Alexandru Radu TwoOfDiamonds Data 19 iunie 2016 11:14:42
Problema Problema Damelor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.4 kb
#include <fstream>
#include <iostream>
#include <cstdio>

using namespace std;

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

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

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


	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--;
	}

}
void bkt(int linie)
{
	if (linie >= max_linii)
	{
		if (!wrote)
		{
			for (int i = 0; i < max_linii; i++)
			{
				//out << decided_pos[i] + 1 << " ";
				fprintf(out, "%d ", decided_pos[i] + 1);
			}
			//out << endl;
			fprintf(out, "\n");
			wrote = true;
		}

		nr_sol++;

		return;
	}

	for (int col = 0; col < max_linii; col++)
	{

		if (matrix[linie][col] == 0)
		{
			modify_spaces(true, linie, col);
			decided_pos[linie] = col;
			bkt(linie + 1);
			modify_spaces(false, linie, col);
		}
	}

}

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

	in = fopen("damesah.in", "r");
	out = fopen("damesah.out", "w");
	fscanf(in, "%d", &max_linii);

	bkt(0);

	//out << nr_sol << endl;
	fprintf(out, "%d\n", nr_sol);

	return 0;
}