Cod sursa(job #577860)

Utilizator ionicaion ionica Data 10 aprilie 2011 18:14:57
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
#include<string.h>

long d1[4] = {-1, 0, 1, 0};
long d2[4] = {0, 1, 0, -1};
long n, m, rx, ry, jx, jy, i, j, pas, min = 900, xx, yy;
short rviz[101][101], jviz[101][101], a[101][101];
char x;

void lee(long x, long y, long pas, short viz[101][101])
{
	for (long i = 0; i <= 3; i ++)
	{
		long ii = x + d1[i];
		long jj = y + d2[i];
		if (ii > 0 && ii <= n && jj > 0 && jj <= m)
		if (a[ii][jj] == 0 && viz[ii][jj] == 0)
		{
			viz[ii][jj] = pas;
			lee(ii, jj, pas + 1, viz);
		}
	}
}

int main()
{
	freopen("1-rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	char t[1010];
	
		scanf("%ld %ld\n", &n, &m);
		
		for (i = 1; i <= n; i++)
		{
			gets(t+1);
			for(j=1;j<=strlen(t+1);j++)
			 if (t[j] == 'R')
				{
					rx = i;
					ry = j;
				}
				else if (t[j] == 'J')
				{
					jx = i;
					jy = j;
				}
				else if (t[j] == 'X') a[i][j] = 1;
		}
					
		rviz[rx][ry] = 1;
		jviz[jx][jy] = 1;
		lee(rx, ry, 2, rviz);
		lee(jx, jy, 2, jviz);
		
		for (i = 1; i <= n; i ++)
			for (j = 1; j <= m; j ++)
			{
				if (rviz[i][j] == jviz[i][j] && rviz[i][j] != 0 && rviz[i][j] < min)
				{
					min = rviz[i][j];
					xx = i;
					yy = j;
				}
			}
		
		printf("%ld %ld %ld\n", min, xx, yy);
	
	return 0;
}