Cod sursa(job #2036374)

Utilizator Andrei17Andrei Pascu Andrei17 Data 10 octombrie 2017 17:12:29
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>

using namespace std;

ifstream fin("copii.in");
ofstream fout("copii.out");

int v[11], n, S;
char A[11][11];
int a[11][11], nr[11];

void print(int m)
{
    bool b[11][11] = {false};
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (A[i][j] == '1')
            {
                b[v[i]][v[j]] = true;
            }
        }
    }
    for (int i = 1; i <= m; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (i != j && !b[i][j]) return;
        }
    }
    S++;
}

/*void bkt(int k)
{
    if (k - 1 == n)
    {
        print();
        return;
    }
    for (int i = 1; i <= nr[k - 1] + 1; i++)
    {
        v[k] = i;
        nr[k] = nr[k - 1];
        if (i == nr[k] - 1)
        {
            ++nr[k];
        }
        bkt(k + 1);
        if (i == nr[k] - 1)
        {
            nr[k] = nr[k - 1];
        }
    }
    if (k != 1)
    {
        ++nr[m + 1];
        bkt(k + 1, m + 1);
        --nr[m + 1];
    }
}*/

void bkt(int k, int m)
{

    if (k - 1 == n)
    {
        print(m);
        return;
    }
    for (int i = 1; i <= m; i++)
    {
        v[k] = i;
        //a[i][++nr[i]] = k;
        bkt(k + 1, m);
        //--nr[i];
    }
    //a[m + 1][++nr[m + 1]] = k;
    v[k] = m + 1;
    bkt(k + 1, m + 1);
    //--nr[m + 1];
}

int main()
{
    fin >> n;
    for (int i = 1; i <= n; i++)
    {
        fin >> 1 + A[i];
    }
    bkt(1, 0);
    fout << S - 1;
    fin.close();
    fout.close();
    return 0;
}