Cod sursa(job #181635)

Utilizator DraStiKDragos Oprica DraStiK Data 18 aprilie 2008 17:56:22
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h
int n,m,xr,yr,xj,yj;
int R[101][101],J[101][101];
char map[101][101];
int deltax[]={-1,0,1, 0,-1,1, 1,-1};
int deltay[]={ 0,1,0,-1, 1,1,-1,-1};
void flood(int a[101][101],int x,int y)
{
	int i,j,k,step,flag=1;
	for ( i = 1; i <= N; ++i )
	   for ( j = 1; j <= M; ++j )
	       a[i][j]=(map[i][j]=='X')?(-1):(100000);
	a[x][y] = 1;
	for (step=1; flag; ++step)
	{
		flag = 0;
		for (i=1; i<=n; ++i)
		for (j=1; j<=m; ++j)
			if (a[i][j]==step)
			for (k=0; k<8; ++k)
				if (a[i][j]+1<a[i+deltax[k]][j+deltay[k]])
				{
					a[i+deltax[k]][j+deltay[k]]=a[i][j]+1;
                    flag=1;
                }
	}
}

void read_solve()
{
	int i,j,retx,rety,cost;
	scanf("%d%d\n",&n,&m);
	for (i=1; i<=N; ++i)
		fgets(map[i]+1,Nmax,stdin);
	for (i=1; i<=n; ++i)
	   for (j=1; j<=m; ++j)
	   {
		  if (map[i][j]=='R')
		  {
                xr=i;
                yr=j;
          }
		  if ( map[i][j] == 'J' )
		  {
                xr=i;
                yr=j;
          }
	   }
	flood(R,xr,yr); 
    flood(J,xj,yj);
	cost = 100000;
	for (i=1; i<=n; ++i)
	for (j=1; j<=M; ++j)
		if (R[i][j]==J[i][j] && R[i][j]>0)
			if (cost>R[i][j])
			{
				cost=R[i][j];
                retx=i;
                rety=j;
		    }
	printf("%d %d %d\n",cost,retx,rety);	
}

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