Cod sursa(job #1562500)

Utilizator raluca1234Tudor Raluca raluca1234 Data 5 ianuarie 2016 10:37:19
Problema Copii Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxN 15
using namespace std;

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

int solutie(){
    int i, j;
    memset(v,0,sizeof(v));

    if (nrg==1) return 0;

    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
            if (s[i][j]=='1' && st[i]!=st[j])
                v[st[i]][st[j]]=1;
    for (i=1; i<=nrg; i++)
        for (j=1; j<=nrg; j++)
            if (i!=j && v[i][j]==0)
                return 0;
    return 1;
}

void backt(int k){
    int i;
    if (k==n+1){
        if (solutie())
            ans++;
    }
    else{
        for (i=1; i<=nrg; i++){
            st[k]=i;
            backt(k+1);
        }
        nrg++;
        st[k]=nrg;
        backt(k+1);
        nrg--;
    }
}

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