Cod sursa(job #591151)

Utilizator CS-meStanca Marian Ciprian CS-me Data 22 mai 2011 18:17:41
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<stdio.h>
FILE *fin=fopen("rj.in","r");
FILE *fout=fopen("rj.out","w");
int n,m,c[3][10001],ir,jr,ij,jj,p,u,R[102][102],J[102][102],ic,jc,d,iv,jv,i,j,jmin,imin,minim;
char a[102][102],ch;

int di[]={1,-1,0,0,1,-1,1,-1};
int dj[]={0,0,1,-1,1,-1,-1,1};

void citire(){
int i,j;	

	fscanf(fin,"%d %d%c",&n,&m,&ch);
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			a[i][j]=fgetc(fin);
			if(a[i][j]=='R'){
				ir=i;
				jr=j;
			}
			else
			if(a[i][j]=='J'){
				ij=i;
				jj=j;
			}
		}
		fgetc(fin);
	}
}

void afisare(){
int i,j;

	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			printf("%c",a[i][j]);
		}
		printf("*\n");
	}
	
}

int main(){

	citire();
	afisare();
	p=1;u=1;
	c[0][1]=ir;
	c[1][1]=jr;
	
	R[ir][jr]=1;
	
	while(p<=u){
		ic=c[0][p];
		jc=c[1][p];
		
		for(d=0;d<=7;d++){
			iv=ic+di[d];
			jv=jc+dj[d];
			
			if(a[iv][jv]==' ' && R[iv][jv]==0){
				u++;
				c[0][u]=iv;
				c[1][u]=jv;
				
				R[iv][jv]=R[ic][jc]+1;
			}
		}
		p++;
	}
	
	// drum pentru J
	
	p=1;u=1;
	c[0][1]=ij;
	c[1][1]=jj;
	
	J[ij][jj]=1;
	
	while(p<=u){
		ic=c[0][p];
		jc=c[1][p];
		
		for(d=0;d<=7;d++){
			iv=ic+di[d];
			jv=jc+dj[d];
			
			if(a[iv][jv]==' ' && J[iv][jv]==0){
				u++;
				c[0][u]=iv;
				c[1][u]=jv;
				
				J[iv][jv]=J[ic][jc]+1;
			}
		}
		p++;
	}
	
	minim=100000;
	
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if(R[i][j]==J[i][j] && R[i][j]<minim && R[i][j]!=0){
				minim=R[i][j];
				imin=i;
				jmin=j;
			}
		}
	}
	
	fprintf(fout,"%d %d %d",minim, imin, jmin);
	
return 0;
}