Cod sursa(job #1868217)

Utilizator Coroian_DavidCoroian David Coroian_David Data 4 februarie 2017 18:07:27
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <cstdio>

using namespace std;

FILE *f, *g;

int n;

int a[200][200];
int p[200][200];

void readFile()
{
    f = fopen("copii.in", "r");

    fscanf(f, "%d", &n);
    int i, j;
    for(i = 1; i <= n; i ++)
    {


        for(j = 1; j <= n; j ++)
            p[i][j] = fgetc(f) - '0';

    }

    fclose(f);
}

int rez;

int stk[20];

void verif(int k, int mx)
{
    int i;
    int j;
    for(i = 1; i <= k; i ++)
    {
       // printf("%d ", stk[i]);

        for(j = 1; j <= k; j ++)
            a[stk[i]][stk[j]] = p[i][j];
    }


   // printf("\n");

    for(i = 1; i <= mx; i ++)
    {
        for(j = 1; j <= mx; j ++)
        {
            if(i != j && a[i][j] == 0)
                return;

            a[i][j] = 0;
        }
    }

    rez ++;
}

inline int mxa(int a, int b)
{
    return (a > b ? a : b);
}

void bkt(int k, int mx)
{
    if(k == n + 1)
    {
        verif(k - 1, mx);
    }

    else
    {
        int i;

       // printf("%d %d\n", mx + 1, k);

        for(i = 1; i <= mx + 1; i ++)
        {
            stk[k] = i;

            bkt(k + 1, mxa(i, mx));
        }
    }
}

void solve()
{
    g = fopen("copii.out", "w");

    bkt(1, 0);

    fprintf(g, "%d\n", rez - 1);

    fclose(g);
}

int main()
{
    readFile();

    solve();

    return 0;
}