Cod sursa(job #1357661)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 24 februarie 2015 01:15:25
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<cstdio>
#include<cstring>
int n,i,j,nr,s,v[20][20],y[20][20],x[20];
char ss[20];
FILE *f,*g;
int verif(){
    memset(y,0,sizeof(y));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if( v[ x[i] ][ x[j] ]==1 && x[i] != x[j] ){
                y[ x[i] ][ x[j] ]=1;
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if( y[ x[i] ][ x[j] ] == 0 && x[i]!=x[j] )
                return 0;
        }
    }
    return 1;
}
void back(int k){
    if(k==n+1){
        s+=verif();
        return;
    }
    for(int i=1;i<=nr;i++){
        x[k]=i;
        back(k+1);
    }
    x[k]=nr+1;
    nr++;
    back(k+1);
    nr--;
}
int main(){
    f=fopen("copii.in","r");
    g=fopen("copii.out","w");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++){
        fscanf(f,"%s",ss);
        for(j=0;j<n;j++){
            v[i][j+1]=ss[j]-'0';
        }
    }
    back(1);
    fprintf(g,"%d",s-1);




    fclose(f);
    fclose(g);
    return 0;
}