Cod sursa(job #2336507)

Utilizator sebi81georgescuGeorgescu Sebastian sebi81georgescu Data 5 februarie 2019 10:35:57
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda simulareinfo1_4 Marime 0.9 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, nrc, x[12], sol = -1;
bool a[12][12], b[12][12];

bool Solve()
{
	for(int i=1; i<=nrc; i++)
		for(int j=1; j<=nrc; j++)
			b[i][j] = 0;

	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
			if(a[i][j] == 1)
				b[x[i]][x[j]] = 1;
	for(int i=1; i<=nrc; i++)
		for(int j=1; j<=nrc; j++)
			if(!b[i][j] && i != j)
				return 0;
	return 1;
}

void Back(int k)
{
	if(k == n+1) sol += Solve();
	else
	{
		for(int j=1; j<=nrc; j++)
		{
			x[k] = j;
			Back(k+1);
		}

		nrc++;
		x[k] = nrc;
		Back(k+1);
		nrc--;
	}
}

int main()
{
	fin>>n;
	fin.get();
	for(int i=1; i<=n; i++)
	{	char x;
		for(int j=1; j<=n; j++)
		{
			fin.get(x);
			if(x == '0') a[i][j] = 0;
			else a[i][j] = 1;
		}
		fin.get();
	}
	Back(1);
	fout<<sol;
	return 0;
}