Cod sursa(job #1728260)

Utilizator GoogalAbabei Daniel Googal Data 12 iulie 2016 16:45:24
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
# include <fstream>
using namespace std;

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

int m[100][100],a[100],n,j,i,k,fr[100],maxx[100];
char ch;

int verif (int n)
{
    int i,j,q,w=0;

        if (maxx[n]==1)
            return 0;
        for (i=1;i<=maxx[n];i++)
            fr[i]=0;
    for (i=1;i<=maxx[n];i++)
    {
        w++;

        for (j=1;j<=n;j++)
            if (a[j]==i)
                for (q=1;q<=m[j][0];q++)
                        fr[a[m[j][q]]]=w;
        for (q=1;q<=maxx[n];q++)
            if (q!=i)
            if (fr[q]!=w)
                return 0;
    }
    k++;
    return 1;

}


 void back (int i)
 {
     int val;
     for (val=1;val<=n;val++)
     {
         a[i]=val;
         maxx[i]=(maxx[i-1]<a[i])? a[i]:maxx[i-1];

         if (a[i]<=maxx[i-1]+1)
             if (i==n)
                 verif (i);
             else
                 back (i+1);
     }

 }


int main ()
{
    fin>>n;
    for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
        {
            fin>>ch;
            if (ch=='1')
            {
                m[i][0]++;
                m[i][m[i][0]]=j;
            }
        }
    back (1);
    fout<<k;
}