Cod sursa(job #497988)

Utilizator Robert29FMI Tilica Robert Robert29 Data 3 noiembrie 2010 20:27:13
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <stdio.h>
FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");
int min,i,j,n,m,x1,x2,y1,y2,ju[102][102],r[102][102],p,u,c,cl[10001],cc[10001],ic,jc,iv,jv;
char a[101][101],x;
int dl[8]={-1,-1,-1,0,1,1,1,0};
int dc[8]={-1,0,1,1,1,0,-1,-1};
int main() {
	fscanf(f,"%d%d",&n,&m);
	fscanf(f,"%c",&c);
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			fscanf(f,"%c",&x);
			if(x=='X'){
				a[i][j]=1;
				r[i][j]=ju[i][j]=-1;
			}
			else
				if(x=='R'){
					x1=i;
					y1=j;
				}else
					if(x=='J'){
						x2=i;
						y2=j;
					}
		}
		fscanf(f,"%c",&c);
	}	
	for(i=0;i<=n+1;i++)
		r[i][0]=r[i][m+1]=ju[i][0]=ju[i][m+1]=-1;
	for(i=1;i<=m;i++)
		r[0][i]=r[n+1][i]=ju[0][i]=ju[n+1][i]=-1;

		
	cl[1]=x1;
	cc[1]=y1;
	r[x1][y1]=1;
	p=u=1;
	while(p<=u){	
		ic=cl[p];
		jc=cc[p];
		for(i=0;i<=7;i++){
			iv = ic + dl[i];
			jv = jc + dc[i];			
			if(a[iv][jv]==0&&r[iv][jv]==0){
				r[iv][jv]=r[ic][jc]+1;
				u++;
				cl[u]=cl[p]+dl[i];
				cc[u]=cc[p]+dc[i];
			}
		}
		p++;
	}		
	cl[1]=x2;
	cc[1]=y2;
	ju[x2][y2]=1;
	p=u=1;
	while(p<=u){	
		ic = cl[p]; 
		jc = cc[p];
		for(i=0;i<=7;i++) {
			iv = ic + dl[i];
			jv = jc + dc[i];
			if(a[iv][jv]==0&&ju[iv][jv]==0){
				ju[iv][jv]=ju[ic][jc]+1;
				u++;
				cl[u]=cl[p]+dl[i];
				cc[u]=cc[p]+dc[i];
			}
		}
		p++;
	}	
	min=1000000000;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(r[i][j]==ju[i][j]&&r[i][j]<min&&r[i][j]>0){
				x1=i;
				y1=j;
				min=r[i][j];
			}
				
	fprintf(g,"%d %d %d",min,x1,y1);
	fclose(g);
	fclose(f);
	return 0;
}