Cod sursa(job #1357718)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 24 februarie 2015 02:23:27
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin("copii.in");
ofstream fout("copii.out");

int n, sol;

int v[15];

char s[15];

bool a[15][15], f[15];

bool verif(int x) {

	if (x == 1)
		return 0;

	for (int i = 1; i <= x; i++) {

		for (int j = 1; j <= 10; j++)
			f[j] = 0;

		f[i] = 1;

		for (int j = 1; j <= n; j++) {

			if (v[j] != i)
				continue;

			for (int k = 1; k <= n; k++)
				if (a[j][k])
					f[v[k]] = 1;

		}

		for (int j = 1; j <= x; j++)
			if (!f[j])
				return 0;
	}

	return 1;

}

void back(int k, int x) {

	if (k == n + 1) {
		if (verif(x))
			sol++;
		return;
	}

	for (int i = 1; i <= x + 1; i++) {
		v[k] = i;
		back(k + 1, max(x, i));
	}

}

int main() {

	fin >> n;

	for (int i = 1; i <= n; i++) {

		fin >> (s + 1);

		for (int j = 1; j <= n; j++)
			a[i][j] = s[j] - '0';

	}

	back(1, 0);

	fout << sol << "\n";

	return 0;
}