Cod sursa(job #516751)

Utilizator andrei.finaruFinaru Andrei Emanuel andrei.finaru Data 26 decembrie 2010 12:29:06
Problema Copii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream.h>
ifstream f("copii.in");
ofstream g("copii.out");
int c,s[11],max[11],n;
char a[11][11];
char prieten[11][11];
/*void afis()
{  int i,j;
	for(j=1;j<=max[n];j++)
	{  g<<"{ ";
		for(i=1;i<=n;i++) if(s[i]==j) g<<i<<' ';
		g<<"} ";
	}
  g<<'\n';	
}*/



int verif()
{
	for(int x=1;x<=max[n];x++)
		{for(int y=1;y<x;y++) if(prieten[x][y]=='0') return 0;
		for(int y=x+1;y<=max[n];y++) if(prieten[x][y]=='0') return 0;}
	return 1;
}

int valid(int k)
{ if(s[k]>max[k-1]+1)return 0; 
  return 1;	
}

void back(int k)
{ int i;
  for(i=1;i<=n;i++) 
      {s[k]=i;
       if(valid(k)) { max[k]=(s[k]>max[k-1])?s[k]:max[k-1];
					for(int x=1;x<=n;x++) if(a[k][x]=='1') prieten[s[k]][s[x]]='1';
		            if(k==n) if(verif()) c++;
								else;
					else back(k+1);
	                 }
      }
}
	
int main()
{ f>>n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++) f>>a[i][j];
  back(1);
  g<<c<<'\n';
  f.close(); g.close();
  return 0;  
}