Cod sursa(job #644416)

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

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