Cod sursa(job #2306939)

Utilizator Iris123Iris Constantin Iris123 Data 23 decembrie 2018 12:31:57
Problema Copii Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <fstream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
ifstream cin ("copii.in");
ofstream cout ("copii.out");
int m[15][15],fin[15][15],n,s=0,care[15];
vector <int> v[15];
bool verif (int k)
{
    int i,j;
    if(k==1)
        return false;
    for(i=1;i<=k;++i)
        for(j=1;j<=k;++j)
            fin[i][j]=0;
    for(i=1;i<=k;++i)
        for(j=0;j<v[i].size();++j)
            care[v[i][j]]=i;
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            if(m[i][j])
                fin[care[i]][care[j]]=1;
    for(i=1;i<=k;++i)
        for(j=1;j<=k;++j)
            if(fin[i][j]==0 && i!=j)
                return false;
    return true;
}
void bck (int poz, int k)
{
    if(poz==n+1)
    {
        if(verif(k))
            ++s;
        return;
    }
    for(int j=1;j<=k;++j)
    {
        v[j].push_back(poz);
        bck(poz+1,k);
        v[j].pop_back();
    }
    v[++k].push_back(poz);
    bck(poz+1,k);
    v[k--].pop_back();
}
int main()
{
    long long i,j,mx=0;
    cin>>n;
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
        {
            char c;
            cin>>c;
            m[i][j]=c-'0';
        }
    bck(1,0);
    cout<<s;
}