Cod sursa(job #609686)

Utilizator Mitza444Vidrean Mihai Mitza444 Data 22 august 2011 21:29:11
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<cstdio>
using namespace std;
#define MAX 150
short n,m,i,j,mat[MAX][MAX],xr,yr,xj,yj,x,y,p,u,u1,xnou,ynou,d,sol;
short dx[]={0, 0,1, 1,1,-1,-1,-1};
short dy[]={1,-1,0,-1,1, 0, 1,-1};
char c[MAX];
struct romjul{
	short r,j;
} q[MAX*MAX][2],RJ[MAX][MAX];
void Lee(){
	q[0][0].r=xr;q[0][1].r=yr;
	q[0][0].j=xj;q[0][1].j=yj;
	for(p=0,u=0,u1=0;p<=u || p<=u1;p++){
		x=q[p][0].r;y=q[p][1].r;
		for(d=0;d<8;d++){
			xnou=x+dx[d];
			ynou=y+dy[d];
			if(!mat[xnou][ynou] && !RJ[xnou][ynou].r && xnou>=0 && ynou>=0 && xnou<n && ynou<m){
				RJ[xnou][ynou].r=RJ[x][y].r+1;
				q[++u][0].r=xnou;
				q[u][1].r=ynou;
			}
		}
		x=q[p][0].j;y=q[p][1].j;
		for(d=0;d<8;d++){
			xnou=x+dx[d];
			ynou=y+dy[d];
			if(!mat[xnou][ynou] && !RJ[xnou][ynou].j && xnou>=0 && ynou>=0 && xnou<n && ynou<m){
				RJ[xnou][ynou].j=RJ[x][y].j+1;
				q[++u1][0].j=xnou;
				q[u1][1].j=ynou;
			}
		}
	}
}
int main(){
	FILE * pFile;
	pFile=fopen("rj.in","r");
	fscanf(pFile,"%d%d\n",&n,&m);
	for(i=0;i<n;i++){
		fgets (c,150,pFile);
		for(j=0;j<m;j++){
			if(c[j]==' ')mat[i][j]=0;
			if(c[j]=='X')mat[i][j]=-1;
			if(c[j]=='R'){xr=i;yr=j;mat[i][j]=1;}
			if(c[j]=='J'){xj=i;yj=j;mat[i][j]=1;}
		}
	}
	Lee();
	pFile=fopen("rj.out","w");
	sol=m*n+10;
	xr=1;yr=1;
	for(i=0;i<=n;i++){
		for(j=0;j<=m;j++){
			if(RJ[i][j].r==RJ[i][j].j && RJ[i][j].r && RJ[i][j].j && sol>RJ[i][j].r){
				sol=RJ[i][j].r;xr=i;yr=j;}
		}
	}
	fprintf(pFile,"%d %d %d",sol+1,xr+1,yr+1);
	return 0;
}