Pagini recente » Cod sursa (job #119970) | Cod sursa (job #743371) | Cod sursa (job #2434755) | Cod sursa (job #2556286) | Cod sursa (job #2028212)
#include <stdio.h>
FILE *fin,*fout;
int v[11][11],st[11],n,rasp;
bool fr[11];
bool verif(int max){
int i,j,k;
if(max==1)
return false;
for(i=1;i<=max;i++){ //pentru fiecare echipa
for(j=1;j<=max;j++)
fr[j]=false;
for(j=1;j<=n;j++)
if(st[j]==i) //vad care sunt in echipa curenta (i)
for(k=1;k<=v[j][0];k++) //ma uit la prietenii membrului j din echipa i
fr[st[v[j][k]]]=true; //marchez echipele cu care membrii sunt prieteni
for(j=1;j<=max;j++)
if(j!=i)
if(fr[j]==false)
return false;
}
return true;
}
void bkt(int k,int max){
int i;
if(k==n+1)
rasp+=verif(max);
else{
for(i=1;i<=max;i++){
st[k]=i;
bkt(k+1,max);
}
st[k]=max+1;
bkt(k+1,max+1);
}
}
int main(){
fin=fopen("copii.in","r");
fout=fopen("copii.out","w");
int i,j;
char ch;
fscanf(fin,"%d",&n);
ch=fgetc(fin);
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
ch=fgetc(fin);
if(ch=='1'){
v[i][0]++;
v[i][v[i][0]]=j;
}
}
ch=fgetc(fin);
}
st[0]=1;
bkt(1,0);
fprintf(fout,"%d",rasp);
fclose(fin);
fclose(fout);
return 0;
}