Cod sursa(job #117262)

Utilizator diac_paulPaul Diac diac_paul Data 21 decembrie 2007 00:14:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#define NMax 105
#define INF 1000000000

FILE *fin, *fout;

long n, m, rm[NMax][NMax], jm[NMax][NMax];
char a[NMax][NMax];

long dx[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
long dy[8] = {-1, -1, -1, 0, 1, 1, 1, 0};

void go(long c[NMax][NMax], long x, long y)
{
	long i;

	for (i = 0; i < 8; i++)
	{
		if (x + dx[i] >= 0 && x + dx[i] < n && y + dy[i] >= 0 && y + dy[i] < m)
		{
			if (a[x+dx[i]][y+dy[i]] != 'X' && c[x+dx[i]][y+dy[i]] > c[x][y] + 1)
			{
				c[x+dx[i]][y+dy[i]] = c[x][y] + 1;
				go(c, x+dx[i], y+dy[i]);
			}
		}
	}
}



int main()
{
	int i, j, tmin, xmin, ymin;
	fin = fopen("rj.in", "rt");
	fout = fopen("rj.out", "wt");

	fscanf(fin, "%ld %ld\n", &n, &m);

	for (i = 0; i < n; i++)
		fgets(a[i], NMax, fin);

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			rm[i][j] = INF;
			jm[i][j] = INF;
		}
	}

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			if (a[i][j] == 'R')
			{
				rm[i][j] = 0;
				go(rm, i, j);
			}
			if (a[i][j] == 'J')
			{
				jm[i][j] = 0;
				go(jm, i, j);
			}
		}
	}

	
	tmin = INF;

	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			if (rm[i][j] == jm[i][j] && tmin > rm[i][j])
			{
				tmin = rm[i][j];
				xmin = i;
				ymin = j;
			}
		}
	}

	fprintf(fout, "%ld %ld %ld\n", tmin + 1, xmin + 1, ymin + 1);

	return 0;
}