Cod sursa(job #431795)

Utilizator razvan2006razvan brezulianu razvan2006 Data 1 aprilie 2010 13:49:41
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#define N 16

char a[N][N];
int v[N], n, sol;
FILE *fin, *fout;

int ver(int nrg)
{
		if(nrg < 2) 
			return 0;
		
		int b[N][N] = {0};
		for(int i = 1; i <= n; i++)
			for(int j = 1; j <= n; j++)
				if(a[i][j] == '1') 
					b[v[i]][v[j]] = 1;
				
		for(int i = 1; i <= nrg; i++)
			for( int j = 1; j <= nrg; j++)
				if(i != j && !b[i][j]) 
					return 0;
				
		return 1;
}

void back(int k, int nrg)
{
		if(k == n + 1)
		{
				sol += ver(nrg);
				return;
		}
		for(int i = 1; i <= nrg; i++)
		{
				v[k] = i;
				back(k + 1, nrg);
		}
		v[k] = nrg + 1;
		back(k + 1, nrg + 1);
}

int main()
{
		fin = fopen("copii.in" ,"rt");
		fout = fopen("copii.out" ,"wt");
		
		fscanf(fin, "%d", &n);
		
		for(int i = 1; i <= n; i++)
			fscanf(fin, "%s", a[i] + 1);
		
		back(1, 0);
		
		fprintf(fout, "%d\n", sol);
		return 0;
}