Cod sursa(job #117103)

Utilizator za_wolfpalianos cristian za_wolf Data 20 decembrie 2007 18:33:25
Problema Tije Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.03 kb
#include<stdio.h>
#include<string.h>
int elem,x[101][101],i,kkt,fin,w,j,n,m,k,l,a,s,poz,q,y[101];
void afis(int a,int b)
{
	printf("%d %d\n",a,b);
}

void golesc(int poz)
{
	int i,j;
   while (x[poz][2]!=0)
   {
   	for (i=n+1;i>poz;i--)
      while (x[i][0]<n&&x[poz][0]>1)
      {
      	x[i][0]++;
         x[i][x[i][0]]=x[poz][x[poz][0]];
         x[poz][x[poz][0]]=0;
         x[poz][0]--;
         afis(poz,i);
      }
   }
}

int caut(int nr,int q)
{
	int i,j,k,p;
   k=1000;
   for (i=q+1;i<=n+1;i++)
   {
   	for (j=x[i][0];j>=1;j--)
      	if (x[i][j]==nr)
         {
         	if (j<k) {k=j;p=i;}
         	j=1;
         }
   }
   return p;
}

int clear(int poz,int nr)
{
	int i,j,k;
   k=1;
	while (x[poz][x[poz][0]]!=nr)
   {
      for (i=n+1;i>q;i--)
		if (x[i][0]<n&&poz&&x[poz][x[poz][0]]!=nr&&i!=poz)
      {
//      if (&&k==1) k=0;
      x[i][++x[i][0]]=x[poz][x[poz][0]];
      x[poz][x[poz][0]]=0;
      x[poz][0]--;
      afis(poz,i);
      i=n+2;
      }
      else
      if (poz&&x[poz][x[poz][0]]==nr)
      {
      	return i;
      }
   }
}

int main()
{
	freopen("tije.in","r",stdin);
  	freopen("tije.out","w",stdout);
   scanf("%ld",&n);
   
   for (i=1;i<=n;i++)
   	for (j=1;j<=n;j++)
      	x[i][++x[i][0]]=i;
         
   for (i=1;i<=n;i++)
   {
   	golesc(i);
      memset(y,0,sizeof(y));
	  y[i]=1;
	  fin=100;
	  elem=-1;
	  while (x[i][0]<n)
	  {
/*      fin=100;
	  elem=-1;
*/
	  for (j=1;j<=n;j++)
	  if (j!=i&&y[j]==0)
	  {
		for (l=i+1;l<=n+1;l++)
         {
         	for (w=x[l][0];w>=1&&x[l][w]!=j;w--);
            if (!(w==0&&x[l][1]!=j))
            {
            s=x[l][0]-w;
            if (s<fin) {fin=s; poz=l; elem=j;}
            }
         }
      }
      j=elem;



	  {

		 {

         	kkt=clear(poz,j); // clear tija poz pana la elementu j

				x[poz][x[poz][0]--]=0;

         	x[i][++x[i][0]]=j;

         	afis(poz,i);
            y[j]=1;
         }
      }

      }
   }


   return 0;
}