Cod sursa(job #434652)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 6 aprilie 2010 13:06:38
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<fstream>
#include<cstring>
using namespace std;
string s;
int sol,vmax,n,fr[11],a[11],mat[11][11];
ifstream fi("copii.in");
ofstream fo("copii.out");
int verifica(void)
{
   int j,t,i,ok;
   ok=1;
   for(i=1;i<=vmax;i++)
   {
       ok=1;
       memset(fr,0,sizeof(fr));
       for(j=1;j<=n;j++)
       if(a[j]==i) for(t=1;t<=n;t++)
                    if(mat[j][t]==1) fr[a[t]]=1;
       for(j=1;j<=vmax;j++)
       if((j!=i)&&(fr[j]==0)) { ok=0; break; }
       if(ok==0) break;
   }
   return ok;
}


void back(int l)
{
    int i,ls;

    if(l==n+1) sol+=verifica(); else
            {
                ls=vmax+1;
                for(i=1;i<=ls;i++)
                {
                    a[l]=i;
                    if(i==ls) vmax++;
                    back(l+1);
                    if(i==ls) vmax--;

                }
            }

}
int main()
{
    int i,j;
    fi>>n;
    vmax=0;
    getline(fi,s);
    for(i=1;i<=n;i++)
    {
        getline(fi,s);
        for(j=0;j<=n-1;j++)
        mat[i][j+1]=s[j]-48;
    }
    back(1);
    fo<<sol-1;
    fo.close();
    return 0;
}