Cod sursa(job #1278914)

Utilizator tudormaximTudor Maxim tudormaxim Data 29 noiembrie 2014 15:28:51
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
char a[12][12];
int x[12], mat[12][12];
int n, nr, sol;
int validare()
{
    int i, j;
    memset(mat, 0, sizeof(mat));
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(a[i][j]) mat[x[i]][x[j]]=1;

    for(i=1; i<=nr; i++)
        for(j=1; j<=nr; j++)
            if(i!=j && !mat[i][j]) return 0;

    return 1;
}

void bkt(int k)
{
    if(k==n+1)
    {
        sol+=validare();
        return;
    }
    for(int i=1; i<=nr; i++)
    {
        x[k]=i;
        bkt(k+1);
    }
    x[k]=++nr;
    bkt(k+1);
    --nr;
}

int main()
{
    freopen("copii.in", "r", stdin);
    freopen("copii.out", "w", stdout);
    int i, j;
    cin>>n;
    for(i=1; i<=n; i++)
    {
        cin>>(a[i]+1);
        for(j=1; j<=n; j++) a[i][j]-='0';
    }
    bkt(1);
    cout<<sol-1;
    return 0;
}