Cod sursa(job #1477876)

Utilizator stefanzzzStefan Popa stefanzzz Data 27 august 2015 11:53:36
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#define MAXN 15
using namespace std;

int n, sz[MAXN], team[MAXN], sol;
char ma[MAXN][MAXN];
bool vf[MAXN][MAXN];

void bkt(int p) {
    if(p == n + 1) {
        int m;
        for(m = 1; sz[m]; m++);
        if(--m == 1) return;

        for(int i = 1; i <= m; i++)
            for(int j = 1; j <= m; j++)
                vf[i][j] = 0;

        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                if(ma[i][j] == '1')
                    vf[team[i]][team[j]] = 1;

        for(int i = 1; i <= m; i++)
            for(int j = 1; j <= m; j++)
                if(i != j && !vf[i][j])
                    return;

        ++sol;
        return;
    }

    for(int i = 1; i <= n && sz[i - 1]; i++) {
        ++sz[i];
        team[p] = i;
        bkt(p + 1);
        --sz[i];
    }
}

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

    scanf("%d\n", &n);
    for(int i = 1; i <= n; i++)
        scanf("%s\n", ma[i] + 1);

    sz[0] = 1;
    bkt(1);

    printf("%d\n", sol);

    return 0;
}