Cod sursa(job #289818)

Utilizator drag0s93Mandu Dragos drag0s93 Data 27 martie 2009 01:16:04
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include<stdio.h>

#define IN "rj.in","r",stdin
#define OUT "rj.out","w",stdout

struct pct {
	int x,y;
};

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

pct coada[100];
int m,n,xR,yR,xJ,yJ,pozx,pozy;
int a[120][120];

void citire()
{
	freopen(IN);
	scanf("%d%d\n",&n,&m);
	
	char c;
	
	for(int i = 1; i <= n ; ++i)
	{
		for(int j = 1; j <= m ;++j)
		{
			scanf("%c",&c);
			if(c == 'R' || c == 'J')
			{
				if(c == 'R')
				{
					xR=i;
					yR=j;
				}
				else
				{
					xJ=i;
					yJ=j;
				}
				a[i][j] = 0;
				continue;
			}
			if(c == 'X')
			{
				a[i][j] = -1;
				continue;
			}
			else if(c == ' ')
			{
				a[i][j] = -3;
				continue;
			}
			a[i][j] = 1;
		}
		scanf("\n");
	}
}

void Lee1()
{
	int i,k,T=1,sx,sy;
	
	coada[T].x = xR;
	coada[T++].y = yR;
	
	for(i = 1 ; i <= T ; ++i)
		for(k = 0 ; k < 8  ; ++k)
		{
			sx = dx[k] + coada[i].x;
			sy = dy[k] + coada[i].y;
			if(sx <= n && sx >= 1 && sy <= m && sy >= 1 && a[sx][sy] == -3 && !(a[sx][sy] == 0 || a[sx][sy] == -1))
			{
				coada[T].x = sx;
				coada[T++].y = sy;
				a[sx][sy] = a[coada[i].x][coada[i].y] + 1;
			}
		}
		for(int i=1;i<=T;++i)
		{
			coada[i].x=0;
			coada[i].y=0;
		}
}

void Lee2()
{
	int i,k,T=1,sx,sy;
	
	
	coada[T].x = xJ;
	coada[T++].y = yJ;
	
	for(i = 1 ; i <= T ; ++i)
		for(k = 0 ; k < 8  ; ++k)
		{
			sx = dx[k] + coada[i].x;
			sy = dy[k] + coada[i].y;
			if(sx <= n && sx >= 1 && sy <= m && sy >= 1 && a[coada[i].x][coada[i].y] + 1 < a[sx][sy]  && !(a[sx][sy] == 0 || a[sx][sy] == -1))
			{
				coada[T].x = sx;
				coada[T++].y = sy;
				a[sx][sy] = a[coada[i].x][coada[i].y] + 1;
			}
			if(a[coada[i].x][coada[i].y] + 1 == a[sx][sy] )
			{
				pozx = sx;
				pozy = sy;
			}
		}
}

void afisare()
{
	freopen(OUT);
	printf("%d %d %d \n",a[pozx][pozy],pozx,pozy);
}

int main()
{
	citire();
	Lee1();
	Lee2();
	afisare();
	return 0;
}