Cod sursa(job #356032)

Utilizator BaciuhookBarbu Ion Baciuhook Data 13 octombrie 2009 11:21:11
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream.h>

int main(){
	int n,m,i,j,a[100][100],x1,x2,y1,y2,p,u,b[100][100],l,c,l1,c1,dx[8]={-1,-1,-1,0,1,1,1,0},dy[8]={-1,0,1,1,1,0,-1,-1},d[100][100],min;
char x;
	ifstream f("rj.in");
ofstream g("rj.out");

int C[2][10001];
char s[101];
f>>n>>m;
for (i=1;i<=n;i++){
    f.get();
    for (j=1;j<=m;j++){
     x=f.get();
	  if (x=='X')
	    a[i][j]=1;
    if (x=='R'){
	       x1=i;
	       y1=j;
	       }
      if (x=='J'){
	  x2=i;
	y2=j;
	    }
    }
  }
p=u=1;
C[0][u]=x1;
C[1][u]=y1;
 b[x1][y1]=1;
while(p<=u){
   l=C[0][p];
   c=C[1][p];
   for (i=0;i<=7;i++){
      l1=l+dx[i];
      c1=c+dy[i];
      if (a[l1][c1]==0&&b[l1][c1]==0&&l1>=1&&l1<=n&&c1>=1&&c1<=m){
	   u++;
	   C[0][u]=l1;
	   C[1][u]=c1;
	   b[l1][c1]=b[l][c]+1;
      }
    }
    p++;
  }
p=u=1;
C[0][u]=x2;
C[1][u]=y2;
 d[x2][y2]=1;
  while(p<=u){
   l=C[0][p];
   c=C[1][p];
   for (i=0;i<=7;i++){
      l1=l+dx[i];
      c1=c+dy[i];
      if (a[l1][c1]==0&&d[l1][c1]==0&&l1>=1&&l1<=n&&c1>=1&&c1<=m){
	   u++;
	   C[0][u]=l1;
	   C[1][u]=c1;
	   d[l1][c1]=d[l][c]+1;
      }
    }
    p++;
  }
min=20001;
for (i=1;i<=n;i++)
  for (j=1;j<=m;j++)
       if (b[i][j]==d[i][j]&&min>b[i][j]&&b[i][j]!=0)
	  min=b[i][j];
g<<min;
return 0;}