Cod sursa(job #559903)

Utilizator laurionLaurentiu Ion laurion Data 18 martie 2011 10:44:19
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <stdio.h>;
#include <string.h>;
#include<iostream>
using namespace std;
#define nmax 110

long i, j, k, n, m, viz[nmax][nmax], xx[nmax * nmax], yy[nmax*nmax], R[nmax][nmax], J[nmax][nmax], dx[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, dy[8] = {0, 1, 1, 1, 0, -1, -1, -1}, rx = 0, ry = 0, jx = 0, jy = 0;
char s[nmax], a[nmax][nmax], c;

void lee(long x, long y, long dist[nmax][nmax]) {
	long ipr, jpr, p = 0, q = 1, x1, y1;

	memset(viz, 0, sizeof(viz));
	xx[1] = x;
	yy[1] = y;
	dist[x][y] = 1;
	viz[x][y] = 1;

	for(ipr = 1;ipr <= n; ++ipr) {
		for(jpr = 1;jpr <= m; ++jpr) {
			dist[ipr][jpr] = 10000;
		}
	}

    p = 0;
    q = 1;
    dist[x][y] = 0;

	while (p <= q) {
		++p;
		x = xx[p];
		y = yy[p];

		for (ipr = 0; ipr < 8; ++ipr) {
			x1 = x + dx[ipr];
			y1 = y + dy[ipr];
			if (viz[x1][y1] == 0 && a[x1][y1] != 'X' && 1 <= x1 && n >= x1 && 1 <= y1 && m >= y1) {
				++q;
				xx[q] = x1;
				yy[q] = y1;
				viz[x1][y1] = 1;
				dist[x1][y1] = dist[x][y] + 1;
			}
		}
	}
	for(int i=1;i<=n;++i)
	{
	    for(int j=1;j<=m;++j)
	    {
	        if(dist[i][j]>5000)
                cout<<"xx ";
            else
                cout<<dist[i][j]<<' ';
	    }
	    cout<<'\n';
	}
	cout<<'\n';
}

int main() {
    long min = 32000, e, r;
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%ld %ld\n", &n, &m);

	for (i = 1; i <= n; ++i) {
		fgets(s, 110, stdin);
		for (j = 1;j <= m; ++j) {
		    c = s[j - 1];
        	a[i][j] = c;
			if (c == 'R') {
                rx = i;
                ry = j;
            }
			if (c == 'J') {
                jx = i;
                jy = j;
            }
		}
	}

	lee(rx, ry, R);
    lee(jx, jy, J);

    for (i = 1; i <= n; ++i) {
        for (j = 1; j <= m; ++j) {
            if (R[i][j] == J[i][j] && R[i][j] < min) {
                min = R[i][j];
                e = i;
                r = j;
            }
		}
	}

    printf("%ld %ld %ld",min + 1, e, r);
    return 0;
}