Cod sursa(job #704069)

Utilizator silviuboganSilviu Bogan silviubogan Data 2 martie 2012 16:12:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

int N, M, hr[101][101], hj[101][101],
	dx[] = {0, 1, 1, 1, 0, -1, -1, -1}, dy[] = {1, 1, 0, -1, -1, -1, 0, 1};

struct pos { int x, y; };

void lee (int h[101][101], int x, int y) {
	int lc = 1;
	pos c[101];

	c[1].x = x;
	c[1].y = y;
	
	while (lc != 0) {
		pos t = {c[lc].x, c[lc].y}, p;
		lc--;

		for (int i = 0; i < 8; i++) {
			p.x = t.x + dx[i];
			p.y = t.y + dy[i];
			if (h[p.x][p.y] == 0) {
				lc++;
				c[lc].x = p.x;
				c[lc].y = p.y;
				h[p.x][p.y] = h[t.x][t.y] + 1;
			}
		}
	}
}

int main () {
	char c;
	int xr, yr, xj, yj;

	fin >> N >> M;

	fin.get(c);
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			fin.get(c);
			if (c == 'R') {
				xr = i;
				yr = j;
				hr[i][j] = 1;
				hj[i][j] = 0;
			} else if (c == 'J') {
				xj = i;
				yj = j;
				hr[i][j] = 0;
				hj[i][j] = 1;
			} else if (c == 'X') {
				hr[i][j] = hj[i][j] = -1;
			} else if (c == ' ') {
				hr[i][j] = hj[i][j] = 0;
			}
		}
		fin.get(c);
	}

	for (int i = 0; i <= N + 1; i++) {
		hr[i][0] = hr[i][M + 1] = hj[i][0] = hj[i][M + 1] = -1;
	}
	for (int i = 0; i <= M + 1; i++) {
		hr[0][i] = hr[N + 1][i] = hj[0][i] = hj[N + 1][i] = -1;
	}

	lee(hr, xr, yr);
	lee(hj, xj, yj);

	int d = N * N, xf, yf;
	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= M; j++) {
			if (hr[i][j] == hj[i][j] && 0 < hr[i][j] && hr[i][j] < d) {
				d = hr[i][j];
				xf = i;
				yf = j;
			}
		}
	}
	fout << d << ' ' << xf << ' ' << yf << ' ' << '\n';
	
	return 0;
}