Cod sursa(job #118516)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 26 decembrie 2007 14:36:06
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <fstream.h>
#include <math.h>
#include <values.h>
const int l[9]={-1,-1,-1,0,0,1,1,1};
const int c[9]={1,0,-1,1,-1,1,-1,0};
long a[104][104];
int x[10000],y[10000],m,n,xmin,ymin,minute=MAXINT;
long nr=2;
void citire()
{
  ifstream fin("rj.in");
  fin>>m>>n;
  char c;
  fin.get(c);
  for (int p=0;p<=n;p++)
  {
      a[0][p]=MAXINT;
      a[m+1][p]=MAXINT;
  }

  for (int r=0;r<=m;r++)
  {
     a[r][0]=MAXINT;
     a[r][n+1]=MAXINT;
  }
     for (int i=1;i<=m;i++){
	for (int j=1;j<=n;j++){
	   fin.get(c);
	   if (c=='J')
	   {
	      x[0]=i;
	      y[0]=j;
	      a[i][j]=-1;
	   }

	   if (c=='R')
	   {
		x[1]=i;
		y[1]=j;
		a[i][j]=1;
	   }

	  if (c=='X')
	     a[i][j]=-MAXINT;
	  if (c=='\n')
	     j=n;
	}
     if (c!='\n')
	fin.get(c);
   }
fin.close();
}
long mini(long a,long b)
{
   if (a<b)
      return a;
   return b;
}

void generare()
{

for (long i=0;i<nr;i++){
   for (int k=0;k<8;k++)
       if (a[x[i]+l[k]] [y[i]+c[k]]==0)
       {
	  x[nr++]=x[i]+l[k];
	  y[nr-1]=y[i]+l[k];
	  if (a[x[i]][y[i]]<0)
	      a[x[i]+l[k]][y[i]+c[k]]=a[x[i]][y[i]]-1;
	  else
	      a[x[i]+l[k]][y[i]+c[k]]=a[x[i]][y[i]]+1;

       }
    }
}

void cauta()
{
   for (int i=1;i<=m;i++)
      for (int j=1;j<=n;j++)
	 if (a[i][j]!=MAXINT)
	 {
	     if (a[i][j]<0)
		for (int k=0;k<8;k++)
		     if (a[i+l[k]][j+c[k]]==a[i][j]*(-1)-1)
			{
			   minute=fabs(a[i][j]);
			   xmin=i;
			   ymin=j;
			   return;
			}
	 }

}

int main()
{
   ofstream fout("rj.out");
   citire();
   generare();
   cauta();
   fout<<minute<<" "<<xmin<<" "<<ymin<<"\n";
   fout.close();
   return 0;
}