Cod sursa(job #381264)

Utilizator pykhNeagoe Alexandru pykh Data 9 ianuarie 2010 19:21:41
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<stdio.h>

const char in[]="rj.in";
const char out[]="rj.out";
const int N=101;
const int linie[]={0, 1, 0, -1, -1, 1, -1, 1};
const int coloana[]={1, 0, -1, 0, -1, 1,  1,-1};

int r[N][N], J[N][N], rx, ry, jx, jy, min=2<<14, minx, miny, n, m;

struct xy{
	int x, y;
};
xy v[N*N];


void lee(int  x, int y, int d[N][N])	
	{int w;
		for(w=0;w<8;++w)
			if(x+linie[w]>0 && x+linie[w]<n && y+coloana[w]>0 && y+coloana[w]<m && d[x+linie[w]][y+coloana[w]]==0)
			{
				d[x+linie[w]][y+coloana[w]]=d[x][y]+1;
				v[++v[0].x].x=x+linie[w];
				v[v[0].x].y=y+coloana[w];
			}
}

int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		int i, j;
		char x;
		scanf("%d %d", &n, &m);
		for(i=1;i<=n;++i)
			for(j=1;j<=m;++j)
			{scanf("%c", &x);
			if(x=='\n')scanf("%c",&x);
			if(x=='X')r[i][j]=J[i][j]=-1;
			else if (x=='R')rx=i, ry=j;
			else if(x=='J')jx=i, jy=j;
			else continue;
			}
			v[0].x=1;v[1].x=rx;v[1].y=ry;r[v[1].x][v[1].y]=1;
			for(i=1;i<=v[0].x;++i)
				lee(v[i].x, v[i].y, r);
			v[0].x=1;v[1].x=jx;v[1].y=jy;J[v[1].x][v[1].y]=1;
			for(i=1;i<=v[0].x;++i)
				lee(v[i].x, v[i].y, J);
			for(j=1;j<=m;++j)
				for(i=1;i<=n;++i)
					if(r[i][j]==J[i][j] && r[i][j]>0 && r[i][j]<min)min=r[i][j], minx=i, miny=j;
			printf("%d %d %d\n",min, minx, miny); 
}