Pagini recente » Cod sursa (job #1617769) | Cod sursa (job #1649893) | Cod sursa (job #14554) | Cod sursa (job #253887) | Cod sursa (job #590056)
Cod sursa(job #590056)
#include <cstdio>
#include <vector>
using namespace std;
char ch[12];
bool a[12][12];
int n,sol,g[12];
vector <int> gr[12];
void back(int k,int ng)
{
int i;
if (k>n)
{
if (ng<2)
return;
int u[12];
int k;
unsigned int j;
for (i=0;i<12;++i)
u[i]=0;
for (i=1;i<=ng;++i)
{
for (j=0;j<gr[i].size();++j)
for (k=1;k<=n;++k)
if (a[gr[i][j]][k]==1)
u[g[k]]=i;
for(int j=1;j<=ng;++j)
if (u[j]!=i&&i!=j)
return;
}
++sol;
return;
}
for (i=1;i<=ng;++i)
{
gr[i].push_back(k);
g[k]=i;
back(k+1,ng);
gr[i].pop_back();
}
++ng;
gr[ng].push_back(k);
g[k]=ng;
back(k+1,ng);
gr[ng].pop_back();
--ng;
}
int main()
{
int i,j;
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
scanf("%d\n",&n);
for (i=1;i<=n;++i)
{
fgets(ch,12,stdin);
for (j=0;j<n;++j)
a[i][j+1]=ch[j]-'0';
}
back(1,0);
printf("%d\n",sol);
return 0;
}