Cod sursa(job #2028175)

Utilizator vazanIonescu Victor Razvan vazan Data 27 septembrie 2017 12:12:39
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>
using namespace std;

int v[100][100];
int s[100];
int n, rasp = 0;

void eval(int b){
    if(b < 2)
        return;
    int frq[100][100];
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            if(v[i][j])
                frq[s[i]][s[j]] = 1;
    for(int i = 1; i <= b; i++)
        for(int j = 1; j <= b; j++)
            if(!frq[i][j] && i != j)
                return;
    rasp++;
}

void bkt(int lev, int big){
    if(lev == n + 1){
        eval(big);
        return;
    }
    for(int i = 1; i <= big; i++){
        s[lev] = i;
        bkt(lev + 1, big);
    }
    if(big < n){
        s[lev] = big + 1;
        bkt(lev + 1, big + 1);
    }
}

int main(){
    freopen("copii.in","r",stdin);
    freopen("copii.out","w",stdout);
    char c[100];
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        gets(c);
        for(int j = 1; j <= n; j++){
            char d = getc(stdin);
            v[i][j] = d - '0';
        }
    }
    bkt(1, 0);
    printf("%d", rasp);
    return 0;
}