Cod sursa(job #672870)

Utilizator somfeleaniuliaSomfelean Iulia somfeleaniulia Data 3 februarie 2012 12:30:29
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include<fstream>
using namespace std;
	fstream fin("rj.in",ios::in),fout("rj.out",ios::out);
	char x[102][102];
	int n,m,ro[102][102],jul[102][102];

	void leero(int i,int j,int ro[102][102])
	{
		//1
		if(i>=1&&ro[i][j]+1<ro[i-1][j])
		{
			ro[i-1][j]=ro[i][j]+1;
			leero(i-1,j,ro);
		}
		if(i>=1&&j<=m&&ro[i][j]+1<ro[i-1][j-1])
		{
			ro[i-1][j-1]=ro[i][j]+1;
			leero(i-1,j-1,ro);
		}
		//2
		if(j<=m&&ro[i][j]+1<ro[i][j+1])
		{
			ro[i][j+1]=ro[i][j]+1;
			leero(i,j+1,ro);
		}
		if(j<=m&&i<=n&&ro[i][j]+1<ro[i+1][j+1])
		{
			ro[i+1][j+1]=ro[i][j]+1;
			leero(i+1,j+1,ro);
		}
		//3
		if(i<=n&&ro[i][j]+1<ro[i+1][j])
		{
			ro[i+1][j]=ro[i][j]+1;
			leero(i+1,j,ro);
		}
		if(i<=n&&j>=1&&ro[i][j]+1<ro[i+1][j-1])
		{
			ro[i+1][j-1]=ro[i][j]+1;
			leero(i+1,j-1,ro);
		}
		//4
		if(j>=1&&ro[i][j]+1<ro[i][j-1])
		{
			ro[i][j-1]=ro[i][j]+1;
			leero(i,j-1,ro);
		}
		if(j>=1&&i>=1&&ro[i][j]+1<ro[i-1][j-1])
		{
			ro[i-1][j-1]=ro[i][j]+1;
			leero(i-1,j-1,ro);
		}
	}
	
	
int main()
{
	int i,j,val,ri,rj,ji,jj,cat,min;

	fin>>n>>m;
	fin.get();
	val=n*m+1;
	for(i=1;i<=n;i++)
	{
		fin.getline(x[i]+1,102);
		for(j=1;j<=m;j++)
		{
			if(x[i][j]==' ')
			{
				jul[i][j]=ro[i][j]=val;
			}
			if(x[i][j]=='X')
				jul[i][j]=ro[i][j]=-1;
			if(x[i][j]=='R')
			{
				ro[i][j]=0;
				ri=i;
				rj=j;
			}
			if(x[i][j]=='J')
			{
				jul[i][j]=0;
				ji=i;
				jj=j;
			}
		}
	}
	leero(ri,rj,ro);
	leero(ji,jj,jul);
	min=val;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(ro[i][j]==jul[i][j]&&ro[i][j]!=-1&&jul[i][j]!=-1&&ro[i][j]!=0&&ro[i][j]<min)
			{
				ri=i;
				rj=j;
				min=ro[i][j];
			}
		}
		
	}
	
	fout<<ri<<" "<<rj<<" "<<min+1;
	

fin.close();
fout.close();
return 0;
}