Cod sursa(job #1143214)

Utilizator andrei_diaconuAndrei Diaconu andrei_diaconu Data 14 martie 2014 23:12:07
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int n, maxim[11], a[11], st[11], nrpart, cop[11][11];
char c;
int verifica()
{
    int pr[11];
    for (int j=1; j<=maxim[n]; j++) {
        memset(pr, 0, sizeof(pr));
        pr[j]=1;
        for (int l=1; l<=n; l++)
            if (a[l]==j)
                for (int m=1; m<=n; m++)
                    if(cop[l][m]==1)
                        pr[a[m]]=1;
        for (int l=1; l<=maxim[n]; l++)
            if (pr[l]==0 || maxim[n]==1)
                return 0;
    }
    return 1;
}
void back(int k)
{
    if (k==n+1) {
        if(verifica())
            nrpart++;
    }
    else {
        for (int i=1; i<=maxim[k-1]+1; i++) {
            a[k]=i;
            maxim[k]=max(maxim[k-1], i);
            back(k+1);
        }
    }
}
int main()
{
    f>>n;
    f.get();
    for (int i=1; i<=n; i++) {
        for (int j=1; j<=n; j++) {
            f>>c;
            cop[i][j]=c-'0';
        }
    }
    back(1);
    g<<nrpart;
    return 0;
}