Cod sursa(job #1384730)

Utilizator hrazvanHarsan Razvan hrazvan Data 11 martie 2015 13:05:43
Problema Copii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <stdio.h>
#define MAXN 10
char ma[MAXN][MAXN], aux[MAXN][MAXN];
int v[MAXN];
int rez = 0;

inline char bun(int n){
  int i, j, max = 0;
  for(i = 0; i < n; i++)
    for(j = 0; j < n; j++)
      aux[i][j] = 0;
  for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
      if(ma[i][j] == 1){
        aux[v[i]][v[j]] = 1;
      }
    }
    if(v[i] > max)
      max = v[i];
  }
  int sum;
  char rez = 1;
  if(max == 0)
    rez = 0;
  for(i = 0; i <= max; i++){
    sum = 0;
    for(j = 0; j <= max; j++){
      if(i != j && aux[i][j] == 1)
        sum++;
    }
    if(sum < max)
      rez = 0;
  }
  return rez;
}

void bkt(int c, int g, int n){
  if(c == n){
    if(bun(n))
      rez++;
  }
  else{
    int i;
    for(i = 0; i < g; i++){
      v[c] = i;
      bkt(c + 1, g, n);
    }
    v[c] = g;
    bkt(c + 1, g + 1, n);
  }
}

int main(){
  FILE *in = fopen("copii.in", "r");
  int n, i, j;
  fscanf(in, "%d ", &n);
  for(i = 0; i < n; i++){
    for(j = 0; j < n; j++){
      ma[i][j] = fgetc(in);
      ma[i][j] -= '0';
    }
    ma[i][i] = 0;
    fgetc(in);
  }
  fclose(in);
  bkt(0, 0, n);
  FILE *out = fopen("copii.out", "w");
  fprintf(out, "%d", rez);
  fclose(out);
  return 0;
}