Cod sursa(job #1723527)

Utilizator andrei4_bulzanAndrei Bulzan andrei4_bulzan Data 30 iunie 2016 20:59:30
Problema Copii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <stdio.h>
#include <stdlib.h>

int n, v[10], p[10][10], x=0;

void check(int nr)
{
    int i, j, k, ok=0, ap[10];
    for(i=0; i<n-1; i++)
        if(v[i] != v[n-1])
            ok = 1;
    if(!ok)
        return;

    for(k=0; k<nr; k++)
    {
        for(i=0; i<nr; i++)
            ap[i]=0;
        for(i=0; i<n; i++)
            if(v[i]==k)
                for(j=0; j<n; j++)
                    if(p[i][j] == 1)
                        ap[v[j]]=1;
        for(j=0; j<nr; j++)
            if(k!=j && !ap[j])
                return;
    }
    ++x;
}

void back(int k, int nr)
{
    int i;
    if(k == n)
        check(nr);
    else
    {
        for(i=0; i<=nr; i++)
        {
            v[k] = i;
            if(i==nr)
                back(k+1, nr+1);
            else
                back(k+1, nr);
        }
    }
}

int main()
{
    FILE *f = fopen("copii.in", "r");
    int i, j;

    fscanf(f, "%d", &n); fgetc(f);

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

    back(0, 0);

    FILE *g = fopen("copii.out", "w");
    fprintf(g, "%d ", x);
    fclose(g);

    return 0;
}