Cod sursa(job #645403)

Utilizator TodeaDariustodea darius TodeaDarius Data 9 decembrie 2011 15:51:47
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,tmin,ar[105][105],aj[105][105],px,py,ok,a,u,p,j,xr,yr,xj,yj;
char s[105];
void bordcit()
{
	for(i=0;i<=n+1;i++)
	{
		ar[i][0]=ar[i][m+1]=aj[i][0]=aj[i][m+1]=-1;
	}
	for(i=0;i<=m+1;i++)
	{
		ar[0][i]=ar[n+1][i]=aj[0][i]=aj[n+1][i]=-1;
	}
	for(i=0;i<=n;i++)
	{
		f.getline(s,105);
		for(j=0;j<m;j++)
		{
			if(s[j]=='X')
			{
				ar[i][j+1]=aj[i][j+1]=-1;
			}
			if(s[j]=='R'){xr=i;yr=j+1;}
			if(s[j]=='J'){xj=i;yj=j+1;}
		}
	}
}
struct pct{int x,y;}c[11025];
int dx[8]={-1,-1,-1,0,1,1,1,0};int dy[8]={-1,0,1,1,1,0,-1,-1};
void lee(int x1,int y1,int a[105][105])
{
	c[1].x=x1;c[1].y=y1;
	p=u=1;
	a[x1][y1]=1;
	while(p<=u)
	{
		pct z=c[p];
		for(i=0;i<8;i++)
		{
			z.x=c[p].x+dx[i];
			z.y=c[p].y+dy[i];
			if(a[z.x][z.y]==0)
			{
				a[z.x][z.y]=a[c[p].x][c[p].y]+1;
				//a[z.x][z.y]=1;
				c[++u].x=z.x;
				c[u].y=z.y;
			}
		}
		p++;
	}
}
void rezolvare()
{
	bordcit();
	lee(xr,yr,ar);
	lee(xj,yj,aj);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(ar[i][j]==aj[i][j] && ar[i][j]>1)
			{
				if(ok==0){tmin=ar[i][j];ok=1;px=i;py=j;}
				else
				{
					if(ar[i][j]<tmin)
					{
						tmin=ar[i][j];
						px=i;py=j;
					}
				}
			}
		}
	}
	g<<tmin<<' '<<px<<' '<<py;return;
}
int main()
{
	f>>n>>m;
	rezolvare();
	return 0;
}