Cod sursa(job #2336582)

Utilizator PredescuSebastianIonPredescu Sebastian Ion PredescuSebastianIon Data 5 februarie 2019 12:01:50
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda simulareinfo1_4 Marime 1.22 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int n,nr,c[12],sol=-1;
bool a[12][12],b[12][12];
bool Solve()
{
    for(int i=1;i<=nr;i++)
    {
        for(int j=1;j<=nr;j++)
        {
            b[i][j]=0;
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(a[i][j]==1)
            {
                b[c[i]][c[j]]=1;
            }
        }
    }
    for(int i=1;i<=nr;i++)
    {
        for(int j=1;j<=nr;j++)
        {
            if(!b[i][j] && i!=j)
            {
                return 0;
            }
        }
    }
    return 1;
}
void solve(int k)
{
    if(k==n+1)sol+=Solve();
    else
    {
        for(int j=1;j<=nr;j++)
        {
            c[k]=j;
            solve(k+1);
        }
        nr++;
        c[k]=nr;
        solve(k+1);
        nr--;
    }
}
int main()
{
    f>>n;
    f.get();
    for(int i=1;i<=n;i++)
    {
        char x;
        for(int j=1;j<=n;j++)
        {
            f.get(x);
            if(x=='0')a[i][j]=0;
            else a[i][j]=1;
        }
        f.get();
    }
    solve(1);
    g<<sol<<'\n';
    return 0;
}