Cod sursa(job #2114510)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 25 ianuarie 2018 17:03:06
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <stdio.h>
using namespace std;

int n, m, sol[11], a[11][11], b[11][11], rez;


void prelucrare (int m) {
    int pp, i, j;
    pp = 1;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
            b[i][j] = 0;
    for (i = 1; i <= n; i++)
        for (j = 1; j <=n; j++)
            if (a[i][j] == 1)
                b[sol[i]][sol[j]] = 1;
    for (i = 1; i <= m; i++)
        for (j = 1; j <= m; j++)
            if (i != j && b[i][j] == 0)
                pp = 0;
   /* for (i  =1; i <= n; i++)
        printf ("%d ", sol[i]);
    printf("\n");*/
    if (m > 1)
        rez += pp;
}

void bkt (int p, int m) {
    int i;
    if (p - 1 == n) {
        prelucrare (m);
        return ;
    }
    for (i = 1; i <=m; i++) {
        sol[p] = i;
        bkt (p + 1, m);
    }
    sol[p] = m + 1;
    bkt (p + 1, m + 1);
}


int main() {

    freopen ("copii.in", "r", stdin);
    freopen ("copii.out", "w", stdout);

    int  i, j;
    char c, inutil;

    scanf ("%d%c", &n, &inutil);
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= n; j++) {
            scanf ("%c", &c);
            a[i][j] = c - '0';
        }
        scanf ("%c", &inutil);
    }

    bkt (1, 0);

    printf ("%d", rez);



    return 0;
}