Cod sursa(job #1325508)

Utilizator niculescuteodorNiculescu Teodor Vicentiu niculescuteodor Data 24 ianuarie 2015 00:20:33
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int posibilitati, matrice[101][101], n,k,as,se,v[101],gasite[101][101];

void citire ()
{
    int i,j;
    char rand [101];
    f>>n;
    f.get ();
    for (i=1;i<=n;i++)
    {
        f.getline (rand,101);
        for (j=1;j<=n;j++)
        matrice [i][j] = rand [j-1]-'0';
    }
    for (i=1;i<=n;i++)
        matrice [i][i]=1;
}

void init ()
{
    v[k]=0;
}

int validare1 ()
{
    if (v[k]<v[k-1]+1)
    {
        v[k]++;
        return 1;
    }
    return 0;
}

int validare2 ()
{
    return 1;
}

int verificare ()
{
    if (k==n)
        return 1; return 0;
}

void afisare ()
{
        int maxim =0,i=1,j=1;
        while (i<=n)
        {
            j=1;
            if (v[i]>maxim)
                maxim = v[i];
            while (j<=n)
            {
                if (matrice [i][j]==1)
                    gasite [v[i]][v[j]]==1;
                j++;
            }
            i++;
        }
        for (i=1;i<=maxim;i++)
            for (j=1;j<=maxim;j++)
                if (i!=j && gasite [i][j]==0)
            {
                for (i=1;i<=maxim;i++)
                    for (j=1;j<=maxim;j++)
                    gasite [i][j]=0;
                return ;
            }

        for (i=1;i<=maxim;i++)
            for (j=1;j<=maxim;j++)
            gasite [i][j]=0;

        posibilitati ++;
}

void backtracking ()
{
    k=1;
    init ();
    while (k>0)
    {
        as=1;
        se=0;
        while (as && !se)
        {
            as=validare1 ();
            if (as)
                se = validare2 ();
        }
        if (as)
            if (verificare ())
                afisare ();
        else
        {
            k++;
            init ();
        }
        else
            k--;
    }
}

int main()
{
    citire ();
    backtracking ();
    g << posibilitati;
    return 0;
}