Cod sursa(job #129215)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 28 ianuarie 2008 19:35:56
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <fstream>
#include <string.h>

using namespace std;

char a[105][105];

int r[105][105],j[105][105];
int x[10000],y[10000],nr;
int xr,yr,xj,yj;
int n,m;

const int l[10]={-1,-1,-1,0,0,1,1,1};
const int c[10]={-1,0,1,-1,1,-1,0,1};

ifstream fin ("rj.in");
ofstream fout("rj.out");

void citire()
{
	fin>>n>>m;
    for (int i=0;i<=n+1;i++)   
    {   
        a[0][i]='X';   
        a[m+1][i]='X';   
    }   

    for (int i=0;i<=m+1;i++)   
    {   
        a[i][0]='X';   
        a[i][n+1]='X';   
    }
	char c[105];
	fin.getline (c,105);
		for (int i=1;i<=n;i++)
		{
			  fin.getline (c,105);
			  for (int j=0;j<m;j++)
			  {
				  a[i][j+1]=c[j];
				  if (c[j]=='R')
				  {
					  xr=i;
					  yr=j+1;
					  a[i][j+1]=' ';
				  }
				  else
					  if (c[j]=='J')
					  {
						  xj=i;
						  yj=j+1;
						  a[i][j+1]=' ';
					  }
			  }
		}
}

void matrice(int m[105][105],int xx,int yy)
{
	memset (x,0,sizeof (x));
	memset (y,0,sizeof (y));

	x[0]=xx;
	y[0]=yy;
	m[x[0]][y[0]]=1;
	nr=0;
    for (int i=0;i<nr;i++)
		for (int k=0;k<8;k++)
			   if (a[x[i] +l[k]] [y[i] +c[k]]==' ' && m[x[i] +l[k]] [y[i] +c[k]]==0)
			   {
				     x[nr]=x[i]+l[k];
					 y[nr]=y[i]+c[k];
					 m[x[nr]][y[nr]]=m[x[i]][y[i]]+1;
					 nr++;
			   }
}
void minim ()
{
	long min=1000003;
	long xmin=0,ymin=0;
	for (int i=1;i<=n;i++)
		for (int y=1;y<=m;y++)
			if (r[i][y]==j[i][y])
				if (r[i][y]<min)
				{
					min=r[i][y];
					xmin=i;
					ymin=y;
				}
	fout<<min<<" "<<xmin<<" "<<ymin<<"\n";
}

int main()
{
	citire();
	matrice(r,xr,yr);
	matrice(j,xj,yj);
	minim();
	fin.close();
	fout.close();
	return 0;
}