Cod sursa(job #1357686)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 24 februarie 2015 01:41:49
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream>
#include<cstring>
using namespace std;
int n,i,j,nr,s,v[11][11],y[11][11],x[11],z[11];
char ss[11][11];
//FILE *f,*g;
ifstream fin("copii.in");
ofstream fout("copii.out");
void back(int k){
    if(k==n+1){
        int ok=1;
        for(int j=1;j<=nr;j++){
            for(int i=0;i<=10;i++){
                z[i]=0;
            }
            z[j]=1;
            for(int i=1;i<=n;i++){
                if(x[i]==j){
                    for(int ii=1;ii<=n;ii++){
                        if( v[i][ii] == 1){
                            z[ x[ii] ]=1;
                        }
                    }
                }
            }
            for(int i=1;i<=nr;i++){
                if(z[i] != 1 || nr == 1)
                    ok=0;
            }
        }
        s+=ok;
        return;
    }
    for(int i=1;i<=nr;i++){
        x[k]=i;
        back(k+1);
    }
    x[k]=++nr;
    back(k+1);
    nr--;
}
int main(){
    //f=fopen("copii.in","r");
    //g=fopen("copii.out","w");
    //fscanf(f,"%d",&n);
    fin>>n;
    for(i=1;i<=n;i++){
      //  fscanf(f,"%s",ss[i]+1);
        fin>>ss[i];
        for(j=0;j<n;j++){
            v[i][j+1]=ss[i][j]-'0';
        }
    }
    back(1);
//    fprintf(g,"%d",s-1);
    fout<<s;



  //  fclose(f);
   // fclose(g);
    return 0;
}