Cod sursa(job #644409)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 6 decembrie 2011 15:19:40
Problema Copii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
# include <fstream>
using namespace std;
ifstream f ("copii.in");
ofstream g ("copii.out");
int a[100],n,j,i,k,fr[100],maxx[100];
char m[100][100];

int verif (int n)
{
	int i,j,q;
	
		if (maxx[n]==1)
			return 0;
	for (i=1;i<=maxx[n];i++)
	{
		for (j=1;j<=maxx[n];j++)
			fr[j]=0;
		
		for (j=1;j<=n;j++)
			if (a[j]==i)
				for (q=1;q<=n;q++)
					if (m[j][q]=='1')
						fr[a[q]]=1;
		for (q=1;q<=maxx[n];q++)
			if (q!=i)
			if (fr[q]==0)
				return 0;
	}
	k++;
	return 1;
	
}


 void back (int i)
 {
	 int val;
	 for (val=1;val<=n;val++)
	 {
		 a[i]=val;
		 maxx[i]=(maxx[i-1]<a[i])? a[i]:maxx[i-1];
			 
		 if (a[i]<=maxx[i-1]+1)
			 if (i==n)
				 verif (i);
			 else
				 back (i+1);
	 }
	 
 }


int main ()
{
	f>>n;
	for (i=1;i<=n;i++)
		for (j=1;j<=n;j++)
			f>>m[i][j];
	back (1);
	g<<k;
}