Pagini recente » ioi_bil_c2 | Cod sursa (job #2388068) | Cod sursa (job #258934) | Cod sursa (job #2250135) | Cod sursa (job #1786683)
#include<cstdio>
const int NMAX=10;
char v[NMAX+1][NMAX+2];
int multime[NMAX+1],nr_multime=0;
bool se_poate[NMAX+1][NMAX+1];
int n,rasp=0;
void back(int k)
{
if(k==n+1)
{
if(nr_multime<2)
return;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
se_poate[i][j]=false;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
if(v[i][j]=='1' && multime[j]!=multime[i])
se_poate[multime[i]][multime[j]]=true;
}
for(int i=1;i<=nr_multime;i++)
{
se_poate[i][0]=true;
for(int j=1;j<=nr_multime;j++)
if(!se_poate[i][j] && j!=i)
se_poate[i][0]=false;
}
bool _se_poate=true;
for(int i=1;i<=nr_multime && _se_poate;i++)
if(!se_poate[i][0])
_se_poate=false;
if(_se_poate)
rasp++;
}
else
{
for(int i=1;i<=nr_multime;i++)
{
multime[k]=i;
back(k+1);
}
multime[k]=nr_multime+1;
nr_multime++;
back(k+1);
nr_multime--;
}
}
int main()
{
FILE *in=fopen("copii.in","r");
fscanf(in,"%d ",&n);
for(int i=1;i<=n;i++)
{
fscanf(in,"%s ",v[i]+1);
}
fclose(in);
back(1);
FILE *out=fopen("copii.out","w");
fprintf(out,"%d\n",rasp);
fclose(out);
return 0;
}