Pagini recente » Cod sursa (job #587379) | Cod sursa (job #267224) | Cod sursa (job #1924185) | Cod sursa (job #918861) | Cod sursa (job #1553699)
#include <cstdio>
#define MAXN 10
int mat[MAXN+1][MAXN+1],v[MAXN+1],vf[MAXN+1][MAXN+1],ind[MAXN+1],next[MAXN+1];
int con,n;
void bkt(int k,int g){
int i,nr,flag,aux1,aux2,poz,j;
if(k==n+1){
flag=1;
for(i=1;i<=g&&flag==1;i++){
poz=ind[i];
nr=0;
while(poz){
for(j=1;j<=n;j++)
if(mat[poz][j]==1&&vf[i][v[j]]==0){
vf[i][v[j]]=1;
nr++;
}
poz=next[poz];
}
if(nr<g-1)
flag=0;
}
for(i=1;i<=g;i++)
for(j=1;j<=g;j++)
vf[i][j]=0;
if(g==1)
flag=0;
con+=flag;
}
else
for(i=1;i<=g+1;i++){
aux1=next[k];
aux2=ind[i];
v[k]=i;
next[k]=ind[i];
ind[i]=k;
if(i==g+1)
bkt(k+1,i);
else
bkt(k+1,g);
next[k]=aux1;
ind[i]=aux2;
}
}
int main(){
FILE*fi,*fout;
int i,j;
char a;
fi=fopen("copii.in" ,"r");
fout=fopen("copii.out" ,"w");
fscanf(fi,"%d" ,&n);
a=fgetc(fi);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
mat[i][j]=fgetc(fi)-'0';
a=fgetc(fi);
}
bkt(1,0);
fprintf(fout,"%d" ,con);
fclose(fi);
fclose(fout);
return 0;
}