Cod sursa(job #1723526)

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

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

void afisare(int nr, FILE *g)
{
    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, FILE *g)
{
    int i;
    if(k == n)
        afisare(nr, g);
    else
    {
        for(i=0; i<=nr; i++)
        {
            v[k] = i;
            if(i==nr)
                back(k+1, nr+1, g);
            else
                back(k+1, nr, g);
        }
    }
}

int main()
{
    FILE *f = fopen("copii.in", "r");
    FILE *g = fopen("copii.out", "w");
    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);
    }
    back(0, 0, g);
    fprintf(g, "%d ", x);

    fclose(f);
    fclose(g);

    return 0;
}