Cod sursa(job #2336524)

Utilizator AlexandruabcdeDobleaga Alexandru Alexandruabcde Data 5 februarie 2019 10:49:48
Problema Copii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>

using namespace std;

ifstream f ("copii.in");
ofstream g ("copii.out");

bool ec[12][12];

int sol[12];

char a[12][12];

int n;

int S;


inline void citire()
{
    f >> n;

    for (int i = 1; i <= n; ++i)
    {
        f >> (a[i] + 1);
    }
}

bool verif(int m)
{
    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            ec[i][j] = false;

    for (int i = 1; i <= n; ++i)
        for (int j = 1; j <= n; ++j)
            if (a[i][j] == '1') ec[sol[i]][sol[j]] = 1;

    for (int i = 1; i <= m; ++i)
        for (int j = 1; j <= m; ++j)
            if (ec[i][j] == false && i != j)
                return false;


    return true;
}

void bac (int el, int nrec)
{
    if (el == n + 1)
    {
        if (nrec > 1 && verif(nrec) == true)
            S++;
    }
    else
    {
        for (int i = 1; i <= nrec; ++i)
        {
            sol[el] = i;
            bac(el + 1, nrec);
        }

        sol[el] = nrec + 1;
        bac(el + 1, nrec + 1);
    }
}
int main()
{
    citire();
    bac(1, 0);

    g << S << '\n';
    return 0;
}