Cod sursa(job #96967)

Utilizator raduzerRadu Zernoveanu raduzer Data 4 noiembrie 2007 14:26:19
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <stdio.h>
#define max(a,b) (a)>(b)?a:b

const int dx[4]= {1, 0 , -1 , 0};
const int dy[4]= {0, 1 , 0 , -1};

int a[10010][2],b[110][110],d[110][110],n,m,rl,rc,jl,jc,z,t,pl,pc;
char c[110][110];

int main()
{
    freopen("rj.in","rt",stdin);
    freopen("rj.out","wt",stdout);
    scanf("%d %d\n",&n,&m);
    int i,j;
    for (i=1; i<=n; ++i)
    {
        for (j=1; j<=m; ++j)
        {
            scanf("%c",&c[i][j]);
            if (c[i][j]=='R')
            {
                 rl=i;
                 rc=j;
            }
            if (c[i][j]=='J')
            {
                 jl=i;
                 jc=j;
            }
        }
    }
    int x,y;
    z=1;
    a[1][0]=rl;
    a[1][1]=rc;
    b[rl][rc]=0;
    for (i=1; i<=z; ++i)
    {
        for (j=1; j<=4; ++j)
        {
            x=a[i][0]+dx[j];
            y=a[i][1]+dy[j];
            if (x>0 && x<=n && y>0 && y<=m && c[x][y]!='X')
            {
                    b[x][y]=b[a[i][0]][a[i][1]]+1;
                    ++z;
                    a[z][0]=x;
                    a[z][1]=y;
            }
        }
    }
    
    for (i=1; i<=n; ++i)
    {
        for (j=1; j<=m; ++j) printf("%d ",b[i][j]);
        printf("\n");
    }
    t=0x3f3f3f3f;
    z=1;
    a[1][0]=jl;
    a[1][1]=jc;
    d[jl][jc]=0;
    for (i=1; i<=z; ++i)
    {
        for (j=1; j<=4; ++j)
        {
            x=a[i][0]+dx[j];
            y=a[i][1]+dy[j];
            if (x>0 && x<=n && y>0 && y<=m && c[x][y]!='X')
            {
                    if (max(d[x][y],b[x][y])<t) 
                    {
                         t=max(d[x][y],d[x][y]);
                         pl=x;
                         pc=y;
                    }
                    d[x][y]=b[a[i][0]][a[i][1]]+1;
            }
        }
    }
    
    printf("%d %d %d",t,pl,pc);
    return 0;
}