Pagini recente » Cod sursa (job #2780994) | Cod sursa (job #2873013) | Cod sursa (job #2722482) | Cod sursa (job #34408) | Cod sursa (job #1357105)
#include<fstream>
#include<bitset>
#include<vector>
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
bitset <12> p[12];
vector <int> v[12];
char a[12];
int n,sol,ap[12],st[12],Max[12];
bool verif(int nr)
{
int i,j,ii,jj;
for (i=1;i<nr;++i)
{
if (!ap[i]) continue;
for (j=i+1;j<=nr;++j)
{
if (!ap[j]) continue;
int ok1=1,ok2=1;
for (ii=0;ii<ap[i] && (ok1|ok2);++ii)
for (jj=0;jj<ap[j] && (ok1|ok2);++jj)
{
if (p[v[i][ii]][v[j][jj]])
ok1=0;
if (p[v[j][jj]][v[i][ii]])
ok2=0;
}
if (ok1|ok2)
return false;
}
}
return true;
}
void back(int k)
{
int i;
Max[k]=Max[k-1];
for (i=1;i<=Max[k-1]+1;++i)
{
st[k]=i, ++ap[i], v[i].push_back(k);
if (i>Max[k-1]) ++Max[k];
if (k<n) back(k+1);
else if (k==n && verif(n))
++sol;
--ap[i], v[i].pop_back();
}
}
int main()
{
int i,j;
fin>>n;
for (i=1;i<=n;++i)
{
fin>>(a+1);
for (j=1;j<=n;++j)
if (a[j]=='1')
p[i][j]=1;
}
st[1]=1, ap[1]=1, v[1].push_back(1), Max[1]=1;
back(2);
fout<<sol-1<<"\n";
return 0;
}