Cod sursa(job #1593880)

Utilizator dyanagGrigore Diana dyanag Data 8 februarie 2016 22:28:48
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#include <cstring>
using namespace std;

int n, nrg, ans;
char s[15][15];
int st[15], v[15][15];

void backt(int k){
    int i, j, ok;
    if(k==n+1){
        if(nrg==1) return;
        for(int i=1; i<=n; ++i)
            for(int j=1; j<=n; ++j){
                v[i][j]=0;
                if(s[i][j]=='1'&&st[i]!=st[j])
                    v[st[i]][st[j]]=1;
            }
        ok=1;
        for(int i=1; i<=nrg; ++i)
            for(int j=1; j<=nrg; ++j)
                if(i!=j&&v[i][j]==0){
                    ok=0;
                    return;
                }
        if(ok) ++ans;
    }
    else{
        for(int i=1; i<=nrg; ++i){
            st[k]=i;
            backt(k+1);
        }
        ++nrg;
        st[k]=nrg;
        backt(k+1);
        --nrg;
    }
}

int main(){
    freopen("copii.in", "r", stdin);
    freopen("copii.out", "w", stdout);
    scanf("%d\n", &n);
    for(int i=1; i<=n; i++)
        gets(s[i]+1);
    backt(1);
    printf("%d", ans);
    return 0;
}