Pagini recente » Cod sursa (job #1749776) | Cod sursa (job #1886487) | Cod sursa (job #2792866) | Cod sursa (job #283957) | Cod sursa (job #1960944)
#include <iostream>
#include <fstream>
#include <bitset>
using namespace std;
ifstream si("copii.in");
ofstream so("copii.out");
int e[15][15];
int l[15];
int lg[15];
int ap[15];
int cont;
int n;
int sol;
void verif()
{
int pr;
for(int i=1;i<=cont;++i)
{
ap[i]=0;
for(int j=1;j<=lg[i];++j)
{
ap[i]+=(1<<e[i][j]);
}
}
for(int i=1;i<=cont;++i)
{
pr=0;
for(int j=1;j<=lg[i];++j)
{
pr|=l[e[i][j]];
}
//cout<<pr<<' ';
for(int j=1;j<=cont;++j)
{
if(((pr&ap[j])==0)&&j!=i)
{
// cout<<'\n';
return;
}
}
}
//for(int i=1;i<=cont;++i)
// cout<<ap[i]<<' ';
//cout<<'\n';
++sol;
}
void part(int x)
{
if(x>n)
{
if(cont>1)
{
verif();
}
return;
}
for(int i=1;i<=cont;++i)
{
e[i][++lg[i]]=x;
part(x+1);
--lg[i];
}
e[++cont][1]=x;
lg[cont]=1;
part(x+1);
--cont;
}
int main()
{
si>>n;
char a;
int p;
for(int i=1;i<=n;++i)
{
l[i]=0;
for(int j=1;j<=n;++j)
{
si>>a;
l[i]+=((a-'0')<<j);
}
}
part(1);
so<<sol;
return 0;
}