Cod sursa(job #345663)

Utilizator vdobrotaDobrota Valentin Eugen vdobrota Data 4 septembrie 2009 01:21:23
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<stdio.h>
#include<string.h>
const int dir1[8]={1,1,1,0,0,-1,-1,-1};
const int dir2[8]={-1,0,1,1,-1,0,-1,1};
int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	int i,j,u,p,queue[10005][2],start[2][2],n,m;
	char map[2][107][107];
	int mapx[2][107][107];
	scanf("%d%d",&n,&m);
	fgets(map[0][0],200,stdin);
	for(i=0;i<n;i++) {
			fgets(map[0][i],200,stdin);
			strcpy(map[1][i],map[0][i]);
			for(j=0;j<m;j++){
			if(map[0][i][j]=='R') {
				start[0][0]=i;
				start[0][1]=j;
			}
			if(map[0][i][j]=='J') {
				start[1][0]=i;
				start[1][1]=j;
			}
		}
	}
	for(i=0;i<2;i++) {
		p=u=0;
		queue[p][0]=start[i][0];
		queue[p][1]=start[i][1];
		mapx[i][start[i][0]][start[i][1]]=0;
		map[i][start[i][0]][start[i][1]]='Y';
		while(p<=u) {
			for(j=0;j<8;j++)
				if(queue[p][0]+dir1[j]>=0 && queue[p][0]+dir1[j]<n)
				if(queue[p][1]+dir2[j]>=0 && queue[p][1]+dir2[j]<m)
				if(map[i][queue[p][0]+dir1[j]][queue[p][1]+dir2[j]]==' ') {
					queue[++u][0]=queue[p][0]+dir1[j];
					queue[u][1]=queue[p][1]+dir2[j];
					mapx[i][queue[p][0]+dir1[j]][queue[p][1]+dir2[j]]=mapx[i][queue[p][0]][queue[p][1]]+1;
					map[i][queue[p][0]+dir1[j]][queue[p][1]+dir2[j]]='Y';
				}
			p++;
		}
	}
	int mi=n,mj=m;
	mapx[0][mi][mj]=n*m+1;
	for(i=0;i<n;i++)
		for(j=0;j<=n;j++)
			if(mapx[0][i][j]==mapx[1][i][j] && map[0][i][j]=='Y' && mapx[0][i][j] < mapx[0][mi][mj]) {
			mi=i;
			mj=j;
			}
	printf("%d %d %d",mapx[0][mi][mj]+1,mi+1,mj+1);
return 0;
}