Cod sursa(job #131903)

Utilizator marinMari n marin Data 4 februarie 2008 17:57:58
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>
#include <string>

#define mn 110
#define mx 65000
#define ml 8

int n,m,l,px,py;
char a[mn][mn];
int c[mn][mn],d[mn][mn];
int sx[mx],sy[mx];
int dx[ml]={0,1,1,1,0,-1,-1,-1};
int dy[ml]={-1,-1,0,1,1,1,0,-1};

void bf1(int x,int y,int c[][mn]){
     int i,j,cx,cy;
     for (i=1;i<=n;i++)
       for (j=0;j<m;j++) 
         if (a[i][j]=='X') c[i][j]=-1;
         else c[i][j]=mx;
     l=1;
     sx[l]=x;
     sy[l]=y;
     c[x][y]=1;
     for (i=1;i<=l;i++)
       for (j=0;j<ml;j++){
           cx=sx[i]+dx[j];
           cy=sy[i]+dy[j];
           
           if ((cx>0) && (cx<=n) && (cy>=0) && (cy<=m) && (c[sx[i]][sy[i]]+1<c[cx][cy])){
               l++;
               sx[l]=cx;
               sy[l]=cy;
               c[cx][cy]=c[sx[i]][sy[i]]+1;
           }
       }
}

int main(){
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d %d ",&n,&m);
    int i,j;
    for (i=1;i<=n;i++) fgets(a[i],mn,stdin);
    for (i=1;i<=n;i++)
      for (j=0;j<m;j++) 
        if (a[i][j]=='R') bf1(i,j,c);
    for (i=1;i<=n;i++)
      for (j=0;j<m;j++)
        if (a[i][j]=='J') bf1(i,j,d);
    px=py=0;
    c[px][py]=mx;
    for (i=1;i<=n;i++)
      for (j=0;j<m;j++)
        if ((c[i][j]!=-1) && (c[i][j]==d[i][j]) && (c[i][j]<c[px][py])) px=i,py=j;
    printf("%d %d %d\n",c[px][py],px,py+1);
    return 0;
}