Cod sursa(job #644408)

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

int verif (int n)
{
	int i,j,max=0,q;
	
	for (i=1;i<=n;i++)
		if (max<a[i])
			max=a[i];
		if (max==1)
			return 0;
	for (i=1;i<=max;i++)
	{
		for (j=1;j<=max;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<=max;q++)
			if (q!=i)
			if (fr[q]==0)
				return 0;
	}
	k++;
	return 1;
	
}

 int valid (int i)
 {
	 int j,max=0;
	 for (j=1;j<i;j++)
		 if (max<a[j])
			 max=a[j];
		 if (a[i]>max+1)
			 return 0;
		 
	return 1;
	 
 }


 void back (int i)
 {
	 int val;
	 for (val=1;val<=n;val++)
	 {
		 a[i]=val;
		 if (valid (i))
			 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;
}