Cod sursa(job #1881985)

Utilizator andra1782Andra Alazaroaie andra1782 Data 16 februarie 2017 21:18:11
Problema Copii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
FILE *fin,*fout;
int n,t,a[10][10],sol[100][10],nr[100];

void verif(int m){
    int i,j,c,k,st,x=0;

    if(m>1){
        for(i=1; i<=m; i++)
            for(c=1; c<=m; c++)
                if(c!=i){
                    st=0;
                    for(j=1; j<=nr[i]; j++)
                        for(k=1; k<=nr[c]; k++)
                            st+=a[sol[i][j]][sol[c][k]];
                    if(st==0)
                        x=1;
                }
        if(x==0)
            t++;
    }
}

void bkt(int p, int m){
    int i;

    if(p-1==n)
        verif(m);
    else{
        for(i=1; i<=m; i++){
            sol[i][++nr[i]]=p;
            bkt(p+1,m);
            --nr[i];
        }
        sol[m+1][++nr[m+1]]=p;
        bkt(p+1,m+1);
        --nr[m+1];
    }
}

int main(){
    fin=fopen("copii.in","r");
    fout=fopen("copii.out","w");
    int i,j;

    fscanf(fin,"%d ",&n);
    for(i=1; i<=n; i++){
        for(j=1; j<=n; j++){
            a[i][j]=fgetc(fin);
            a[i][j]-='0';
        }
        fgetc(fin);
    }
    bkt(1,0);
    fprintf(fout,"%d\n",t);
    fclose(fin);
    fclose(fout);
    return 0;
}