Cod sursa(job #193641)

Utilizator cotofanaCotofana Cristian cotofana Data 5 iunie 2008 21:24:08
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>

int n, m, mat[101][101], xr, yr, t, x1, y1;
char s[101][101];

void lee()
{
	int xx, yy, x[10001], y[10001], pr, ul, i;
	const int dx[]={-1, -1, 0, 1, 1, 1, 0, -1}, dy[]={0, 1, 1, 1, 0, -1, -1, -1};
	pr=ul=0;
	x[0]=xr;
	y[0]=yr;
        mat[xr][yr]=1;
	while (pr<=ul && s[x[pr]][y[pr]]!='J')
	{
		for (i=0; i<8; i++)
		{
			xx=x[pr]+dx[i];
			yy=y[pr]+dy[i];
			if (xx>=0 && xx<n && yy>=0 && yy<m && (s[xx][yy]==' ' || s[xx][yy]=='J') && mat[xx][yy]==0)
			{
				mat[xx][yy]=mat[x[pr]][y[pr]]+1;
				ul++;
				x[ul]=xx;
				y[ul]=yy;
			}
		}
                pr++;
	}
	t=(mat[x[pr]][y[pr]]+1)/2;
	x1=x[pr];
	y1=y[pr];
	while (mat[x1][y1]!=t)
	{
		for (i=0; i<8; i++)
		{
			xx=x1+dx[i];
			yy=y1+dy[i];
			if (mat[xx][yy]==mat[x1][y1]-1)
			{
				x1=xx;
				y1=yy;
				break;
			}
		}
	}
}

int main()
{
	freopen("rj.in", "rt", stdin);
	freopen("rj.out", "wt", stdout);
	int i, j;
	scanf("%d %d\n", &n, &m);
	for (i=0; i<n; i++) 
	{
		gets(s[i]);
		for (j=0; j<m; j++) if (s[i][j]=='R')
		{
			xr=i;
			yr=j;
		}
	}
	lee();
	printf("%d %d %d\n", t, x1+1, y1+1);
	return 0;
}