Cod sursa(job #1140511)

Utilizator hellol30FMI Macovei Daniel hellol30 Data 12 martie 2014 02:30:16
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<cstdio>
#include<queue>
using namespace std;

int n, m, a[102][102],b[102][102], xj, yj, xr, yr, tmin=10000000, x,y;
int dl[]={-1,-1,-1,0,1,1,1,0};
int dc[]={-1,0,1,1,1,0,-1,-1};
queue< pair<int, int> > Q;
pair<int, int> aux;
char c;
bool ok(int x, int y)
{
	return (x>=1 && x<=n && y>=1 && y<=m);
}
void cit()
{
	freopen("rj.in","rt",stdin);
	freopen("rj.out","wt",stdout);
	scanf("%d %d",&n,&m);
	scanf("%c",&c);
	for(register int i=1;i<=n;i++, scanf("%c",&c))
		for(register int j=1;j<=m;j++)
		{
			scanf("%c",&c);
			if(c=='X') a[i][j]=b[i][j]=-1;
			if(c=='R') { xr=i; yr=j; }
			if(c=='J') { xj=i; yj=j; }
		}
	
}
void parg(int x, int y, int a[][102])
{
	Q.push(make_pair(x,y));
	a[x][y]=1;
	while(!Q.empty())
	{
		aux=Q.front();
		Q.pop();
		for(register int k=0;k<8;k++)
		{
			int ll=aux.first+dl[k], cc=aux.second+dc[k];
			if(ok(ll,cc) && a[ll][cc]==0)
			{
				a[ll][cc]=a[aux.first][aux.second]+1;
				Q.push(make_pair(ll,cc));
			}
		}
	}
}

void drum()
{
	for(register int i=1;i<=n;i++)
		for(register int j=1;j<=m;j++)
		{
			if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<tmin)
			{
				tmin=a[i][j];
				x=i;
				y=j;
			}
		}
}
int main()
{
	cit();
	parg(xr,yr,a);
	parg(xj,yj,b);
	drum();
	printf("%d %d %d",tmin,x,y);
	return 0;
}