Cod sursa(job #2481921)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 27 octombrie 2019 16:37:48
Problema Copii Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");

int perm[20];
int a[20][20];
char sir[20][20];
int sol = 0;

int nrSubgrupe;

void check(int n)
{
	if(nrSubgrupe < 2)
	{
		return;
	}
	bool matr[15][15];
	for(int i = 1; i <= n; ++i)
	{
		for(int j = 1; j <= n; ++j)
		{
			matr[i][j] = 0;
		}
	}
	for(int i = 1; i <= n; ++i)
	{
		for(int j = 1; j <= n; ++j)
		{
			if(a[i][j])
			{
				matr[perm[i]][perm[j]] = 1;
			}
		}
	}
	for(int i = 1; i <= nrSubgrupe; ++i)
	{
		for(int j = 1; j <= nrSubgrupe; ++j)
		{
			if(i!=j && !matr[i][j])
			{
				return;
			}
		}
	}
	++sol;
}

void part(int poz, int n)
{
	if(n+1 == poz)
	{
		check(n);
		return;
	}
	for(int i = 1; i <= nrSubgrupe; ++i)
	{
		perm[poz] = i;
		part(poz+1,n);
	}
	++nrSubgrupe;
	perm[poz]=nrSubgrupe;
	part(poz+1, n);
	--nrSubgrupe;

}

int main()
{
	int n;
	fin >> n;
	for(int i = 1; i <= n; ++i)
	{
		fin >> (sir[i] +1);
	}

	for(int i = 1; i <= n; ++i)
	{
		for(int j = 1; j <= n; ++j)
		{
			a[i][j] = sir[i][j] - '0';
		}
	}
	part(1,n);
	fout << sol;
	fin.close();
	fout.close();
	return 0;
}