Cod sursa(job #614583)

Utilizator cristian9Cristian Zloteanu cristian9 Data 6 octombrie 2011 21:09:45
Problema Copii Scor 0
Compilator cpp Status done
Runda bkt1_oct2011 Marime 1.03 kb
#include<stdio.h>
#include<string.h>
int n, i, j, sol[20], p[20][20], nr;
char m[20][20];

void verificare (int gr){
    int i, j;
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            p[i][j]=0;

    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(m[i][j]=='1')
                p[sol[i]][sol[j]]=1;
    /*for(i=1; i<=gr; i++){
        for(j=1; j<=gr; j++)
            printf("%d ", p[i][j]);
        printf("\n");
    }*/
    for(i=1; i<=gr; i++)
        for(j=1; j<=gr; j++)
            if(p[i][j]==0 && i!=j)
                return ;

    nr++;
}

void back(int p, int gr){
    if(p-1==n){
        verificare(gr);
        return ;
    }
    for(i=1; i<=gr; i++){
        sol[p]=gr;
        back(p+1, gr);
    }
    sol[p]=gr+1;
    back(p+1, gr+1);
}

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

    scanf("%d ", &n);
    for(i=1; i<=n; i++)
        gets(m[i]+1);

    back(1, 0);

    printf("%d ", nr-1);

    return 0;
}