Cod sursa(job #1636505)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 7 martie 2016 10:27:03
Problema Copii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#include <stdlib.h>

int n,i,j,nrsol,nc;
int v[15];
int a[15][15];
int r[15][15];

void verifica(){


    int i,j;

    if (nc<=1){
        return;
    }

    for (i=1; i<=nc; i++){
        for (j=1; j<=nc; j++){
            r[i][j]=0;
        }
        r[i][i]=1;
    }
    for (i=1; i<=n; i++){
        for (j=1; j<=n; j++){
            if (a[i][j]==1 && j!=i && v[i]!=v[j]){
                    r[v[i]][v[j]]=1;
            }
        }
    }
    for (i=1; i<=nc; i++){
        for (j=1; j<=nc; j++){
            if (r[i][j]==0) return;
        }
    }
    nrsol++;
}

void generare(int k){
    int j;
    if (k==n+1){
        verifica();
    }else{
        for (j=1; j<=nc; j++){
            v[k]=j;
            generare(k+1);
        }
        nc++;
        v[k]=nc;
        generare(k+1);
        nc--;
    }
}

int main(){
    char c;

    freopen("copii.in","r",stdin);
    freopen("copii.out","w",stdout);


    scanf("%d",&n);
    for (i=1; i<=n; i++){
        for (j=1; j<=n; j++){
            scanf("%c",&c);
            a[i][j]=c-'0';
        }
    }
    generare(1);
    printf("%d",nrsol+1);
    return 0;

}