Cod sursa(job #205997)

Utilizator IrnukIrina Grosu Irnuk Data 3 septembrie 2008 22:40:36
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
/*rj*/

#include<fstream.h>


char a[103][103],cit[2];
int n,m,sv_i_j,sv_j_j,sv_i_r,sv_j_r,ro[103][103],ju[103][103],minim=32000;

int dl[]={-1,0,1,0,-1,1,-1,1};
int dc[]={0,1,0,-1,-1,-1,1,1};

struct o
{
	int x,y,d;
}C[1000],E;

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

void cauta()
{
	int i,j;
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
		{
			if(a[i][j]=='R')
			{
				sv_i_r=i;
				sv_j_r=j;
			}
			if(a[i][j]=='J')
			{
				sv_i_j=i;
				sv_j_j=j;
			}
		}

}

void bord()
{
	int i,j;
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
		{
			if(a[i][j]==' ' || a[i][j]=='R' || a[i][j]=='J')
				ro[i][j]=ju[i][j]=-2;
			else
				ro[i][j]=ju[i][j]=-1;
		}
}

void lee(int x0,int y0,int a[103][103])
{
	int ic,sc,xn,yn,i,dn;
	ic=0;
	sc=0;
	C[sc].x=x0;
	C[sc].y=y0;
	C[sc].d=0;
	a[x0][y0]=0;
	
	while(ic<=sc)
	{	
		E=C[ic];
		ic=ic+1;
		for(i=0;i<=7;i++)
		{
			xn=E.x+dl[i];
			yn=E.y+dc[i];
			dn=E.d+1;
			if(a[xn][yn]==-2) 
			{
				a[xn][yn]=dn;
				sc=sc+1;
				C[sc].x=xn;
				C[sc].y=yn;
				C[sc].d=dn;
			}
		}
	}

	
}
int main()
{
	int i,j;
	fin>>n>>m;
	fin.getline(cit,2);
	
	for(i=0;i<n;i++)
		fin.getline(a[i],103);
	cauta();
	bord();
	lee(sv_i_r,sv_j_r,ro);
	lee(sv_i_j,sv_j_j,ju);

	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			if(ro[i][j]==ju[i][j] && ro[i][j]>0)
				if(minim>ro[i][j])
				{
					minim=ro[i][j];
					sv_i_r=i;
					sv_j_r=j;
				}

	fout<<minim+1<<" "<<sv_i_r+1<<" "<<sv_j_r+1<<'\n';

	fout.close();
	return 0;
}