Cod sursa(job #2028212)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 27 septembrie 2017 13:20:05
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#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;
}