Cod sursa(job #1244083)

Utilizator turbowin120Amarandei-Stanescu Alexandru turbowin120 Data 16 octombrie 2014 19:21:49
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;

FILE *in;

ofstream out("copii.out");


int n,sol[101],m[101][101],nmax=0,verific[11][11];
int k;
char str[200];






int ver(){
    int v=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++)
            verific[i][j]=0;

    }

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        if(m[i][j]==1) verific[sol[i]][sol[j]]=1;

    for(int i=1;i<=k;i++){
        for(int j=1;j<=k;j++)
            if(!verific[i][j]&&i!=j) return 0;


    }
   return 1;


}

void citire(){
    in=fopen("copii.in","r");
    fscanf(in,"%d",&n);
        fgets(str,2,in);
    for(int i=1;i<=n;i++){
            fgets(str+1,100,in);
        for(int j=1;j<=n;j++){
            if(str[j]=='1') m[i][j]=1;
        }
    }

}


void bkt(int p){


    if(p-1==n){
    nmax+=ver();
    }
    else{
        for(int i=1;i<=k;i++){

            sol[p]=i;
            bkt(p+1);
        }
        k++;
        sol[p]=k;
        bkt(p+1);
        k--;
    }

}


int main()
{
    citire();

    bkt(1);
     out<<nmax-1;
    return 0;
}