Pagini recente » Cod sursa (job #2433076) | Cod sursa (job #452372) | Cod sursa (job #2076753) | Cod sursa (job #3157482) | Cod sursa (job #2087071)
#include<stdio.h>
#include<string.h>
#define MAXN 10
bool verif();
void bkt(int lev);
FILE*fin,*fout;
int N,maxmult=0;
long long ans=0;
int sol[MAXN+1];
bool adiac[MAXN+1][MAXN+1];
bool gasit[MAXN+1][MAXN+1];
int main()
{
fin=fopen("copii.in","r");
fout=fopen("copii.out","w");
fscanf(fin,"%d",&N);
fgetc(fin);
char buf[MAXN+1];
for(int i=1; i<=N; i++)
{
fgets(buf,MAXN+1,fin);
for(int j=0; j<N; j++)
{
adiac[i][j+1]=buf[j]-'0';
}
}
bkt(1);
fprintf(fout,"%lld",ans);
fclose(fin);
fclose(fout);
}
void bkt(int lev)
{
if(lev==N+1)
{
//print_sol();
if(verif())
{
ans++;
}
}
else
{
for(int i=1; i<=maxmult; i++)
{
sol[lev]=i;
bkt(lev+1);
}
maxmult++;
sol[lev]=maxmult;
bkt(lev+1);
maxmult--;
}
}
bool verif()
{
if(maxmult<2)
{
return 0;
}
for(int i=1; i<=MAXN; i++)
{
for(int j=1; j<=MAXN; j++)
{
gasit[i][j]=0;
}
}
for(int i=1; i<=N; i++)
{
for(int j=1; j<=N; j++)
{
if(adiac[i][j])
{
gasit[sol[i]][sol[j]]=1;
}
}
}
for(int i=1; i<=maxmult; i++)
{
for(int j=1; j<=maxmult; j++)
{
if(!gasit[i][j] && i!=j)
{
return 0;
}
}
}
return 1;
}