Cod sursa(job #77411)

Utilizator peanutzAndrei Homorodean peanutz Data 14 august 2007 12:03:15
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2 kb
#include <stdio.h>
#include <string.h>
#include <memory.h>

#define NMAX 105


typedef struct coada
{
int x, y;
};


char a[NMAX][NMAX];
int n, m;
int ri, rj, ji, jj;

int r[NMAX][NMAX];
int j[NMAX][NMAX];


void read()
{
int i, j;

scanf("%d %d\n", &n, &m);

for(i = 1; i <= n; ++i)
	{
		fgets(a[i]+1, NMAX, stdin);


		for(j = 1; j <= m; ++j)
			{
				if(a[i][j] == 'R')
					ri = i, rj = j;
				else if(a[i][j] == 'J')
					ji = i, jj = j;
			}
	}
}


void parcurgere(int bi, int bj, int m[NMAX][NMAX])
{
coada c[10000];

int inc, sf;
int x, y, j;
int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1}, dy[] = {0, 1, 1, 1, 0, -1, -1, -1};


memset(m, 0, sizeof(m));


inc = sf = 0;


c[0].x = bi;
c[0].y = bj;


m[bi][bj] = 1;


while(inc <= sf)
	{
		x = c[inc].x;
		y = c[inc++].y;


		for(j = 0; j < 8; ++j)
			{
				if((a[ x+dx[j] ][ y+dy[j] ] == ' ')  &&  (m[ x+dx[j] ][ y+dy[j] ] == 0)  )
					{
						c[++sf].x = x+dx[j];
						c[sf].y = y+dy[j];

						m[ x+dx[j] ][ y+dy[j] ] = m[x][y] + 1;
					}
			}
	}
//printf("%d\n", sf);
}


void bordare()
{
int i;

for(i = 0; i <= n+1; ++i)
	a[i][0] = a[i][m+1] = 'X';

for(i = 0; i <= m+1; ++i)
	a[0][i] = a[n+1][i] = 'X';
}


void write()
{
int i, k;
int tmin = 32000, x, y;


for(i = 1; i <= n; ++i)
	{
		for(k = 1; k <= m; ++k)
			if((r[i][k] != 0)  &&  (r[i][k] == j[i][k]))
				if(tmin > r[i][k])
					{
						tmin = r[i][k];

						x = i;
						y = k;
					}
	}
printf("%d %d %d\n", tmin, x, y);
}


void print_m(int p[NMAX][NMAX])
{
int i, j;


for(i = 1; i <= n; ++i)
	{
		for(j = 1; j <= m; ++j)
			printf("%d ", p[i][j]);
		printf("\n");
	}
}



int main()
{
freopen("rj.in", "r", stdin);
freopen("rj.out", "w", stdout);


read();


bordare();


parcurgere(ri, rj, r);

//print_m(r);


parcurgere(ji, jj, j);

//print_m(j);

//printf("%d %d\n", r[5][52], j[5][52]);

write();


fclose(stdin);
fclose(stdout);

return 0;
}