Cod sursa(job #1877704)

Utilizator andy1207Cioltan Andrei andy1207 Data 13 februarie 2017 18:01:26
Problema Copii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#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;
}