Pagini recente » Cod sursa (job #2114861) | Cod sursa (job #1661499) | Cod sursa (job #2698143) | Cod sursa (job #2712524) | Cod sursa (job #1216393)
#include <cstdio>
#include <cstring>
using namespace std;
#define NMAX 20
char V[NMAX][NMAX];
int N,current,i,j,ans;
int equip[NMAX];
bool passed()
{
if (equip[0]<=1)
return false;
bool current[NMAX][NMAX];
memset(current,false,sizeof(current));
for (int i=1;i<=N;++i)
for (int j=1;j<=N;++j)
if (V[i][j]=='1')
current[equip[i]][equip[j]]=true;
for (int i=1;i<=equip[0];++i)
for (int j=1;j<=equip[0];++j)
if (!current[i][j] && i!=j)
return false;
return true;
}
void back(int step)
{
if (step>N)
{
if (passed())
++ans;
return ;
}
for (int i=1;i<=equip[0];++i)
{
equip[step]=i;
back(step+1);
}
++equip[0];
equip[step]=equip[0];
back(step+1);
--equip[0];
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
for (i=1,scanf("%d\n",&N);i<=N;++i,scanf("\n"))
for (j=1;j<=N;++j)
scanf("%c",&V[i][j]);
back(1);
printf("%d\n",ans);
return 0;
}