Cod sursa(job #2114453)

Utilizator ivan.tudorIvan Tudor ivan.tudor Data 25 ianuarie 2018 16:39:05
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int priet[11][11];
int sol[11];
int n,cazuri;
int grupe[11][11];
int team[11];
void prelucrare(int m){
  int i,j,grf=0;
  for(i=1;i<=n;i++){
    grupe[sol[i]][++grupe[sol[i]][0]]=i;
  }
  int k;
  for(i=1;i<=m;i++){
    for(j=1;j<=grupe[i][0];j++)
      for(k=1;k<=n;k++)
        if(priet[grupe[i][j]][k]==1)
          team[sol[k]]=1;
    j=1;
    team[i]=1;
    while(j<=m && team[j]==1)
      j++;
    if(j==m+1)
      grf++;
    memset(team,0,sizeof(team));
  }
  if(grf==m && m>=2)
    cazuri++;
  for(i=1;i<=10;i++){
    grupe[i][0]=0;
  }
}
void bkt(int p,int m){
  if(p-1==n){
    prelucrare(m);
    return;
  }
  for(int i=1;i<=m;i++){
    sol[p]=i;
    bkt(p+1,m);
  }
  sol[p]=m+1;
  bkt(p+1,m+1);
}
int main()
{
    char c;
    FILE*fin,*fout;
    fin=fopen("copii.in","r");
    fout=fopen("copii.out","w");
    int i,j;
    fscanf(fin,"%d ",&n);
    for(i=1;i<=n;i++){
      for(j=1;j<=n;j++){
        c=fgetc(fin);
        priet[i][j]=c-'0';
      }
      fscanf(fin," ");
    }
    bkt(1,0);
    fprintf(fout,"%d",cazuri);
    return 0;
}