Cod sursa(job #186697)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 28 aprilie 2008 17:23:28
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <stdio.h>
#define INF 20000000
#define N 103
struct rj{
	int x,y;
};
rj sr[N*N],sj[N*N];
int r[N][N],j[N][N],m,n;
const int lin[8]={1,-1,0,0,1,1,-1,-1};
const int col[8]={0,0,1,-1,1,-1,1,-1};
void leer(int x,int y){
	for(int t=0;t<8;t++)
		if(r[x+lin[t]][y+col[t]]==-2){
			sr[++sr[0].x].x=x+lin[t];
			sr[sr[0].x].y=y+col[t];
			r[x+lin[t]][y+col[t]]=r[x][y]+1;
		}
}
void leej(int x,int y){
	for(int t=0;t<8;t++)
		if(j[x+lin[t]][y+col[t]]==-2){
			sj[++sj[0].x].x=x+lin[t];
			sj[sj[0].x].y=y+col[t];
			j[x+lin[t]][y+col[t]]=j[x][y]+1;
		}
}
int main(){
	int i,p,min=INF,x,y;
	char c;
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d\n",&m,&n);
	for (i=1;i<=m;++i)
		for (p=1;p<=n+1;++p){
			scanf("%c",&c);
			if (c=='R'){
				sr[1].x=i;
				sr[1].y=p;
				r[i][p]=1;
				j[i][p]=-2;
			}
            if (c=='J'){
				sj[1].x=i;
				sj[1].y=p;
				r[i][p]=-2;
				j[i][p]=1;
			}
			if (c=='X'){
				r[i][p]=-1;
				j[i][p]=-1;
            }
            if (c==' '){
               r[i][p]=-2;
               j[i][p]=-2;
            }
		}
	sr[0].x=sj[0].x=1;
	for(i=1;i<=sr[0].x;i++)
		leer(sr[i].x,sr[i].y);
	for(i=1;i<=sj[0].x;i++)
		leej(sj[i].x,sj[i].y);
	for(i=1;i<=m;i++)
		for(p=1;p<=n;p++)
			if(r[i][p]>0)
				if(r[i][p]==j[i][p] && r[i][p]<min) {
					min=r[i][p];
					x=i;
					y=p;
				}
	/*for(i=1;i<=m;i++){
		for(p=1;p<=n;p++)
			printf("%d ",r[i][p]);
		printf("\n");
	}
	for(i=1;i<=m;i++){
		for(p=1;p<=n;p++)
			printf("%d ",j[i][p]);
		printf("\n");
	}*/
	printf("%d %d %d\n",min,x,y);
	return 0;
}