Cod sursa(job #2475800)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 17 octombrie 2019 16:52:35
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <fstream>
using namespace std;
#define N 16
int a[N][N],b[N][N],ans,n,g[N];
char c;
bool check (int nr){
    if (nr == 1)
        return 0;
    int i,j;
    for (i = 0; i < nr; ++i)
        for (j = 0; j < nr; ++j)
        b[i][j] = 0;
    for (i = 0; i < n; ++i)
        for (j = 0; j < n; ++j)
        if (a[i][j])
            b[g[i] - 1][g[j] - 1] = 1;
    for (i = 0; i < nr; ++i)
        for (j = 0; j < nr; ++j)
        if (i != j && !b[i][j])
        return 0;
    return 1;
}

void bkt (int k,int nr){
    if (k == n){
        if (check (nr))
            ++ans;
        return;
    }
    for (int i = 0; i < nr; ++i){
        g[k] = i + 1;
        bkt (k + 1, nr);
        g[k] = 0;
    }
    g[k] = nr + 1;
    bkt (k + 1, nr + 1);
    g[k] = 0;
}

int main()
{
    ifstream fin ("copii.in");
    ofstream fout ("copii.out");
    fin >> n;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < n; ++j){
            fin >> c;
            a[i][j] = (int)(c - '0');
        }
    bkt (0,0);
    fout << ans;
    return 0;
}