Cod sursa(job #672158)

Utilizator xbogdanBogdan Boamfa xbogdan Data 1 februarie 2012 17:58:22
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
ifstream in("copii.in");
ofstream out("copii.out");

const int N = 12;
char a[N][N];
int sol[N],n,rez;

void afisare()
{
    for(int i=1 ; i<=n ; i++) out<<sol[i]<<" ";
    out<<"\n";
}


void verif(int m)
{
    char b[N][N];
    int i,j;
    for(i=1 ; i<=m ; i++)
        for(j=1 ; j<=m ; j++)
            b[i][j] = 0;
    for(i=1 ; i<=n; i++)
        for(j=1; j<=n; j++)
            if(a[i][j] == '1')
                b[sol[i]][sol[j]] = 1;
    for(i=1 ; i<=m; i++)
        for(j=1; j<=m; j++)
            if(b[i][j] == 0 && i!=j) return;
    //afisare();
    rez++;
}

void bkt(int p,int m)
{
    if(p-1 == n)
    {
        //afisare();
        verif(m);
        return ;
    }
    for(int i=1;i<=m+1;i++)
    {
        sol[p] = i;
        if(i==m+1) bkt(p+1,m+1);
        else bkt(p+1,m);
    }
}

int main()
{
    int i,j;
    in >> n >> ws;
    for(i=1;i<=n;i++)
    {
        in.getline(&a[i][1],N);
    }
    bkt(1,0);
    out<<rez-1;
    return 0;
}