Cod sursa(job #1723483)

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

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

int valid(int nr)
{
    int i, j;
    for(i=0; i<nr; i++)
        for(j=0; j<nr; j++)
            a[i][j] = 0;

    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
            if(p[i][j] == 1)
                a[v[i]][v[j]] = 1;

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

void afisare(int nr, FILE *g)
{
    int i, ok=0;
    for(i=0; i<n-1; i++)
        if(v[i] != v[n-1])
            ok = 1;
    if(!ok)
        return;

    if(!valid(nr))
        return;

    ++x;
    //for(i=0; i<n; i++)
      //  fprintf(g, "%d ", v[i]);
    //fputc('\n', g);
}

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;
}