Cod sursa(job #2481912)

Utilizator IordachescuAncaFMI Iordachescu Anca Mihaela IordachescuAnca Data 27 octombrie 2019 16:29:37
Problema Copii Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 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[20][20] = {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;
}