Cod sursa(job #1994234)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 24 iunie 2017 13:52:49
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
typedef vector<int> mult;
vector<mult> t;
int n, k = 0, ix[10];
bool v[10][10];
bool check( void )
{
    if(t.size()==1)
        return 0;
    for(int i=0; i<t.size(); i++)
    {
        int d=(1<<i);
        for (int j:t[i])
        {
            for(int k=0; k<n; k++)
            if(v[j][k]) d|=(1<<ix[k]);
        }
        if(d!=(1<<t.size())-1)
            return 0;
    }
    return 1;
}
void bkt(int p=0)
{
    if(p==n)
    {
        k+=check();
    }
    else
    {
        for(int i=0; i<t.size(); i++)
        {
            ix[p]=i;
            t[i].push_back( p );
            bkt(p+1);
            t[i].pop_back();
        }
        ix[p]=t.size();
        t.push_back( vector<int>(1,p));
        bkt(p+1);
        t.pop_back();
    }
}
int main()
{
    f>>n;
    for(int i=0; i<n; i++)
    for(int j=0; j<n; j++)
    {
        char ch;
        f>>ch;
        v[i][j]=(ch=='1');
    }
    bkt();
    g<<k;
    return 0;
}