Cod sursa(job #1356202)

Utilizator faker99Fache Adrian faker99 Data 23 februarie 2015 11:45:15
Problema Copii Scor 100
Compilator cpp Status done
Runda blitz_test_r1 Marime 1.05 kb
#include <fstream>

using namespace std;

int mul,n,sol,st[20];
int v[20][20],a[20][20];
char s[20];

int afis()
{
    int e=0;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= n; ++j)
        {
            v[i][j]=0;
            if(a[i][j] == 1 && st[i]!=st[j]) v[st[i]][st[j]] = 1;
        }

    for(int i = 1; i <= mul; ++i)
        for(int j = 1; j <= mul; ++j)
        {
            if(i!=j && v[i][j] == 0) return 0;
        }

    return 1;
}

void back(int k)
{
    if (k == n+1) sol+=afis();
    else
    {
        for(int i = 1; i <= mul; ++i)
        {
            st[k]=i;
            back(k+1);
        }
        st[k] = ++mul;
        back(k+1);
        --mul;
    }
}
int main()
{
    ifstream f("copii.in");
    ofstream g("copii.out");
    f>>n;f.get();
    for(int i = 1; i <= n; ++i)
       {
           f.getline(s+1,20);
           for(int j = 1; j <= n; ++j)
                if(s[j] == '1') a[i][j]=1;
       }
    sol=0;
    back(1);
    --sol;
    g<<sol<<"\n";
    return 0;
}