Cod sursa(job #422255)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 22 martie 2010 13:46:48
Problema Copii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>

FILE *f,*s;

struct prieten
{
	char x[50];
};

prieten v1[50],v3[50];

int n,i,j,rez,v2[50];

int Verifica()
{
    int max=0;
     
    for(int i=2;i<=n;i++)
    {  
        if(v2[i]>max)
            max=v2[i];
    }      
     
    for(int i=1;i<=n;i++)
        for(int j=0;j<=10;j++)
            v3[i].x[j]='0';
	
	for(i=1;i<=n;i++)
		printf("%d ",v2[i]);
	printf("\n");	
		
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=n-1;j++)
        {
            if(v1[i].x[j]=='1')
                v3[v2[i]].x[v2[j+1]]='1';
        }  
    }  
	
	int ok=1;
    for(int i=1;i<=max;i++)
    {	
        for(int j=1;j<=max;j++)
        {
            if(v3[i].x[j]!='1'&&i!=j)
                ok=0;
        }  
    }  
	
    if(ok==1&&max>1)
        return 1;
    else
        return 0;
}   

void Echipe(int k, int l)
{
	if(k==n+1)
	{
		rez+=Verifica();
		
		return;
    }
   
    for(int i=1;i<=l;i++)
    {
        v2[k]=i;
		
        Echipe(k+1,l);
    }
	
    v2[k]=l+1;
    Echipe(k+1,l+1);
}

int main()
{
	f=fopen("copii.in","r");
	s=fopen("copii.out","w");
	
	fscanf(f,"%d\n",&n);
	
	for(i=1;i<=n;i++)
		fscanf(f,"%s\n",&v1[i].x); 

	Echipe(1,0);
	
	fprintf(s,"%d",rez);
	
	fclose(s);
}