Cod sursa(job #1682094)

Utilizator Daria09Florea Daria Daria09 Data 9 aprilie 2016 22:49:58
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int n,x[20],sol; bool a[20][20],b[20][20]; char s[20];
bool verif(int grupe)
{
    int i,j;
    for(i=1;i<=grupe;i++)for(j=1;j<=grupe;j++)a[i][j]=0;
    for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(b[i][j])a[x[i]][x[j]]=1;
    for(i=1;i<=grupe;i++)for(j=1;j<=grupe;j++)if(!a[i][j]&&i!=j)return 0; return 1;
}
void my_back(int poz,int grupe)
{
    if(poz==n+1)sol+=verif(grupe); else
    {
       int i=1;
       while(i<=grupe){x[poz]=i;my_back(poz+1,grupe);i++;}
       x[poz]=grupe+1; my_back(poz+1,grupe+1);
    }
}
int main()
{
    f>>n; f.get(); int i,j;
    for(i=1;i<=n;i++){f.getline(s,19); for(j=0;j<n;j++)b[i][j+1]=s[j]-'0';}
    my_back(1,0);g<<sol-1;
    return 0;
}