Cod sursa(job #1701302)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 12 mai 2016 18:06:36
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("copii.in");
ofstream out("copii.out");
bool prieten[15][15];
bool viz[15][15];
int posibilitati;
string s = "";
int v[20];
int n, nr;

void _back_(int poz)
{
    if(poz == n + 1)
    {
        if(nr == 1)
            return;

        for(int i = 1; i <= nr; i++)
        {
            for(int j = 1; j <= nr; j++)
            {
                if(i != j)
                    viz[i][j] = 0;
                else
                    viz[i][j] = 1;
            }
        }
        for(int i = 1; i <= n; i++)
            for(int j = 1; j <= n; j++)
                if(i != j && prieten[i][j] == 1 && v[i] != v[j])
                    viz[v[i]][v[j]] = 1;

        for(int i = 1; i <= nr; i++)
            for(int j = 1; j <= nr; j++)
                if(!viz[i][j])
                    return;
        posibilitati++;
    }
    else
    {
        for(int i = 1; i <= nr; i++)
        {
            v[poz] = i;
            _back_(poz + 1);
        }
        v[poz] = ++nr;
        _back_(poz + 1);
        nr--;
    }
}
int main()
{
    in >> n;
    for(int i = 1; i <= n; i++)
    {
        s = "";
        in >> s;
        for(int j = 1; j <= n; j++)
            prieten[i][j] = s[j - 1] - '0';
    }
    _back_(1);
    out << posibilitati;
    return 0;
}