Cod sursa(job #83219)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 10 septembrie 2007 14:41:01
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <stdio.h>

    char a[101][101];
    long p,q,xr,yr,xj,yj,k,xx,yy,min=100000;
    long n,m,i,j,mr[101][101],mj[101][101];
    long xn[10001],yn[10001];
    long dx[]={0,-1,-1,-1,0,1,1,1,0};
    long dy[]={0,-1,0,1,1,1,0,-1,-1};

int main(){
 
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);

    scanf("%ld %ld\n",&n,&m);
    //gets(a[0]);
    for (i=1;i<=n;i++){
        gets(a[i]);
        for (j=0;j<m;j++){if (a[i][j]=='R'){xr=i;yr=j+1;}
                          if (a[i][j]=='J'){xj=i;yj=j+1;}
                         }   
    }
    
    //drumul lui romeo
    p=1;q=1;
    mr[xr][yr]=1;
    xn[1]=xr;
    yn[1]=yr;
    while (p<=q){
          for (k=1;k<=8;k++){
              xx=xn[p]+dx[k];
              yy=yn[p]+dy[k];
              if (xx>=1&&xx<=n&&yy>=1&&yy<=m){
                 if (!mr[xx][yy]) 
                    if (a[xx][yy-1]!='X'){
                                   mr[xx][yy]=mr[xn[p]][yn[p]]+1;
                                   q++;xn[q]=xx;yn[q]=yy;
                    }
                 
              }
          }
          p++;
    }
    
    //drumul julietei
    p=1;q=1;
    mj[xj][yj]=1;
    xn[1]=xj;
    yn[1]=yj;
    while (p<=q){
          for (k=1;k<=8;k++){
              xx=xn[p]+dx[k];
              yy=yn[p]+dy[k];
              if (xx>=1&&xx<=n&&yy>=1&&yy<=m){
                 if (!mj[xx][yy]) 
                    if (a[xx][yy-1]!='X'){
                                   mj[xx][yy]=mj[xn[p]][yn[p]]+1;
                                   q++;xn[q]=xx;yn[q]=yy;
                    }
                 
              }
          }
          p++;
    }
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            if (mr[i][j]&&mr[i][j]==mj[i][j])
               if (mr[i][j]<min){min=mr[i][j];xx=i;yy=j;}
               
    printf("%ld %ld %ld",min,xx,yy);
    return 0;
}