Cod sursa(job #1357401)

Utilizator horatiu11Ilie Ovidiu Horatiu horatiu11 Data 23 februarie 2015 21:56:10
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
//horatiu11
# include <cstdio>
# include <cstring>
# define nmax 11
using namespace std;
int n,nr,sol,st[nmax];
bool a[nmax][nmax],ok[nmax][nmax];
char c;
inline bool verif(int k)
{
    int i,j;
    if(nr==1)return false;
    memset(ok,0,sizeof(ok));
    for(i=1;i<=n;++i)
        for(j=1;j<=n;++j)
            if(a[i][j])ok[st[i]][st[j]]=true;
    for(i=1;i<=nr;++i)
        for(j=1;j<=nr;++j)
            if(i!=j && !ok[i][j])return false;
    return true;
}
void back(int k)
{
    if(k==n+1)
    {
        if(verif(k))
            sol++;
    }
    else
    {
        for(int x=1;x<=nr;++x)
        {
            st[k]=x;
            back(k+1);
        }
        st[k]=++nr;
        back(k+1);
        --nr;
    }
}
int main()
{
    int i,j;
    freopen("copii.in","r",stdin);
    freopen("copii.out","w",stdout);
    scanf("%d%c",&n,&c);
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=n;++j)
        {
            scanf("%c",&c);
            if(c=='1')a[i][j]=true;
        }
        scanf("%c",&c);
    }
    back(1);
    printf("%d\n",sol);
    return 0;
}