Cod sursa(job #345913)

Utilizator LuffyBanu Lavinia Luffy Data 5 septembrie 2009 15:28:46
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.23 kb
#include<stdio.h>
#include<iostream>
using namespace std;
short int a[101][101],b[101][101],n,m,i,j,lj,cj,l[10000],c[10000],lr,cr,aux,x,y;
int mint;
char p;
int main()
{
FILE *f=fopen("rj.in","r") , *g=fopen("rj.out","w");
fscanf(f,"%hd%hd",&n,&m);

  for(i=1;i<=n;i++)
    {fscanf(f,"%c",&p);
	  for(j=1;j<=m;j++)
	{fscanf(f,"%c",&p);
	 if(p=='X') {a[i][j]=-1; b[i][j]=-1;}
	 else if(p=='R') {a[i][j]=1; 
		              l[1]=i; c[1]=j; lr=i; cr=j;}
	 else if(p=='J') {lj=i; cj=j; b[i][j]=1;}
	}}
	
i=1;j=1;

    while(i<=j)
  {x=l[i]; y=c[i];
	if(x==lj && y==cj) break;
	aux=a[x][y];
	 if(x>1)
	 {if( a[x-1][y]==0 )   {j++; l[j]=x-1; c[j]=y;   a[x-1][y]=aux+1; }
	  if(y>1) if( a[x-1][y-1]==0 ) {j++; l[j]=x-1; c[j]=y-1; a[x-1][y-1]=aux+1; }
	  if(y<m) if( a[x-1][y+1]==0 ) {j++; l[j]=x-1; c[j]=y+1; a[x-1][y+1]=aux+1; }
	 }
	 
	 
	 if(y>1) if( a[x][y-1]==0 )   {j++; l[j]=x;   c[j]=y-1; a[x][y-1]=aux+1; }
	 if(y<m) if( a[x][y+1]==0 )   {j++; l[j]=x;   c[j]=y+1; a[x][y+1]=aux+1; }
	 
	 if(x<n)
	 {if( a[x+1][y]==0 )   {j++; l[j]=x+1; c[j]=y;   a[x+1][y]=aux+1; }
	  if(y>1) if( a[x+1][y-1]==0 ) {j++; l[j]=x+1; c[j]=y-1; a[x+1][y-1]=aux+1; }
	  if(y<m) if( a[x+1][y+1]==0 ) {j++; l[j]=x+1; c[j]=y+1; a[x+1][y+1]=aux+1; }
     }
	  i++;}

i=1;j=1; l[1]=lj; c[1]=cj;
 
 
 
  while(i<=j)
  {x=l[i]; y=c[i];
	if(x==lr && y==cr) break;
	aux=b[x][y];
	 if(x>1)
	 {if( b[x-1][y]==0 )   {j++; l[j]=x-1; c[j]=y;   b[x-1][y]=aux+1; }
	  if(y>1) if( b[x-1][y-1]==0 ) {j++; l[j]=x-1; c[j]=y-1; b[x-1][y-1]=aux+1; }
	  if(y<m) if( b[x-1][y+1]==0 ) {j++; l[j]=x-1; c[j]=y+1; b[x-1][y+1]=aux+1; }
	 }
	 
	 if(y>1) if( b[x][y-1]==0 )   {j++; l[j]=x;   c[j]=y-1; b[x][y-1]=aux+1; }
	 if(y<m) if( b[x][y+1]==0 )   {j++; l[j]=x;   c[j]=y+1; b[x][y+1]=aux+1; }
	
	 if(x<n)
	 {if( b[x+1][y]==0 )   {j++; l[j]=x+1; c[j]=y;   b[x+1][y]=aux+1; }
	  if(y>1) if( b[x+1][y-1]==0 ) {j++; l[j]=x+1; c[j]=y-1; b[x+1][y-1]=aux+1; }
	  if(y<m) if( b[x+1][y+1]==0 ) {j++; l[j]=x+1; c[j]=y+1; b[x+1][y+1]=aux+1; }
	 }
	 i++;}
 
  mint=800000;
   for(i=1;i<=n;i++)
	for(j=1;j<=m;j++)
	  if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<mint) {mint=a[i][j]; lj=i; cj=j;}
	  
fprintf(g,"%d %hd %hd\n",mint,lj,cj);
fclose(f);
fclose(g);
return 0;
}