Pagini recente » Cod sursa (job #2688153) | Cod sursa (job #1969249) | Cod sursa (job #1217276) | Cod sursa (job #3148789) | Cod sursa (job #1877704)
#include<cstdio>
const int Nmax=10;
const int D=0;
const int A=0;
char a[Nmax+1][Nmax+1];
char mat[Nmax+1][Nmax+1];
bool b[Nmax+1][Nmax+1];
int sol[Nmax+1];
int n,q,s,pp;
//sol[p]=nr. de ordine al submultimii din care face parte p;
void prelucrare(int p,int m)
{
int q=0;
if(m == 1) return;
pp=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
b[i][j]=false;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mat[i][j]=='1')
{
b[sol[i]][sol[j]]=true;
}
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
if(i!=j && !b[i][j])
return;
}
}
s++;
if(D==1)
{
for(int i=1;i<m;i++)
{
for(int j=1;j<=a[i][0];j++)
printf("%d",a[i][j]);
printf("\n");
}
for(int j=1;j<=a[m][0];j++)
printf("%d",a[m][j]);
printf("\n\n");
}
if(A==1)
{
//printf("%d\n",pp);
if(pp>=m-1)
{
s++;
for(int i=1;i<m;i++)
{
for(int j=1;j<=a[i][0];j++)
printf("%d",a[i][j]);
printf("\n");
}
for(int j=1;j<=a[m][0];j++)
printf("%d",a[m][j]);
printf("\n\n");
}
}
}
void bkt(int p,int m)
{
if(p-1==n)
{
prelucrare(p,m);
return;
}
for(int i=1;i<=m;i++)
{
sol[p]=i;
a[i][++a[i][0]]=p;
bkt(p+1,m);
a[i][0]--;
}
sol[p]=++m;
a[m][++a[m][0]] = p;
bkt(p + 1, m);
--a[m][0];
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
scanf("%d\n",&n);
for(int i=1;i<=n;i++)
{
/*
for(int j=1;j<=n;j++)
{
scanf("%c ",&mat[i][j]);
}
scanf("\n");
*/
scanf("%s",1 + mat[i]);
}
//for(int i = 1; i <= n; i++)
//printf("%s\n", 1 + mat[i]);
bkt(1,0);
printf("%d\n",s);
return 0;
}