Pagini recente » Cod sursa (job #1010124) | Cod sursa (job #1361673)
#include<stdio.h>
#include<string.h>
#define DIM 15
FILE *f=fopen("copii.in","r"), *g=fopen("copii.out","w");
long int N, a[DIM][DIM], grupa[DIM], SOL=0;
bool ok[DIM][DIM];
void Citire(){
long int i, j, l;
char s[DIM];
fscanf(f,"%ld\n",&N);
for(i=1;i<=N;i++){
fscanf(f,"%s",s); l = strlen(s); if( s[l-1] == '\n' ){ s[l-1]='\0'; l--; }
for(j=0;j<=N-1;j++) a[i][j+1] = s[j]-'0';
}
}
bool Verifica( long int nrgrupe ){
long int i, j, gr;
if( nrgrupe <= 1 ) return 0;
for(i=1;i<=nrgrupe;i++) for(j=1;j<=nrgrupe;j++) ok[i][j]=0;
for(i=1;i<=nrgrupe;i++) ok[i][i]=1;
for(i=1;i<=N;i++) for(j=1;j<=N;j++) if( a[i][j]==1 ) ok[ grupa[i] ][ grupa[j] ]=1;
for(i=1;i<=nrgrupe;i++) for(j=1;j<=nrgrupe;j++) if( ok[i][j] == 0 ) return 0;
return 1;
}
void back( long int nr, long int nrgrupe ){
long int i;
if( nr > N ) { if( Verifica(nrgrupe) == 1 ) SOL++; }
else{
for(i=1;i<=nrgrupe;i++){ grupa[nr]=i; back(nr+1,nrgrupe); }
grupa[nr] = nrgrupe + 1; back(nr+1,nrgrupe+1);
}
}
int main(){
Citire();
back(1,0);
fprintf(g,"%ld\n",SOL);
return 0;
}