Cod sursa(job #1562507)

Utilizator raluca1234Tudor Raluca raluca1234 Data 5 ianuarie 2016 10:47:00
Problema Copii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 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];

void backt(int k){
    int i, j, ok;
    if (k==n+1){
        if (nrg==1) return;

        memset(v,0,sizeof(v));
        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;
        ok=1;
        for (i=1; i<=nrg; i++)
            for (j=1; j<=nrg; j++)
                if (i!=j && v[i][j]==0){
                    ok=0;
                    return;
                }
        if (ok) 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;
}