Pagini recente » Cod sursa (job #874617) | Cod sursa (job #1384708) | Cod sursa (job #2941748) | Cod sursa (job #1770090) | Cod sursa (job #1383105)
#include <stdio.h>
#define MAXN 10
int n, d[MAXN], v[MAXN], t[MAXN], p[MAXN], ans;
inline int check(int max){
int f=(max>1), i, j;
for(i=0; i<max; i++){
p[i]=d[i]=0;
}
for(i=0; i<n; i++){
p[v[i]]|=t[i];
d[v[i]]|=1<<i;
}
i=0;
while((f==1)&&(i<max)){
j=0;
while((j<max)&&(f==1)){
if((p[i]&d[j])==0){
f=0;
}
j++;
}
i++;
}
return f;
}
void partit(int k, int max){
int i;
if(k==n){
ans+=check(max);
return ;
}
for(i=0; i<max; i++){
v[k]=i;
partit(k+1, max);
}
v[k]=max;
partit(k+1, max+1);
}
int main(){
int i, j;
char ch;
FILE *fin, *fout;
fin=fopen("copii.in", "r");
fout=fopen("copii.out", "w");
fscanf(fin, "%d ", &n);
for(i=0; i<n; i++){
t[i]=1<<i;
for(j=0; j<n; j++){
ch=fgetc(fin);
if(ch=='1'){
t[i]|=1<<j;
}
}
fgetc(fin);
}
partit(0, 0);
fprintf(fout, "%d\n", ans);
fclose(fin);
fclose(fout);
return 0;
}