Cod sursa(job #128674)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 27 ianuarie 2008 17:39:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 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};
int a[104][104];
int x[10000],y[10000],m,n,xmin,ymin,minute=MAXINT;
int nr=2;
char mat[105][105];

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+1;r++)
  {
     a[r][0]=MAXINT;
     a[r][n+1]=MAXINT;
  }
for (int i=1; i<=m; i++)
{
for (int k=1; k<=n; k++)
{
    fin.get(c);
    a[i][k]=MAXINT;
    if (c=='R')
    {
    x[0]=i;
    y[0]=k;
    a[i][k]=1;
    }
    if (c=='J')
    {
    x[1]=i;
    y[1]=k;
    a[i][k]=-1;
    }
    if (c==' ')
       a[i][k]=0;
}
  fin.get(c);
  fin.get(c);
}

fin.close();
}

long mini(long a,long b)
{
   if (a<b)
      return a;
   return b;
}

void generare()
{

nr=2;
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]+c[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()
{
    minute=31543;
   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++)
		   for (int o=k+1;o<8;o++)

		     if (a[i+l[k]][j+c[k]]==a[i+l[o]][j+c[o]]*(-1))
			{
			   if (fabs(a[i][j])<minute)
			   {
			       minute=fabs(a[i][j]);
			       xmin=i;
			       ymin=j;
			   }
			}
	 }
}

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