Cod sursa(job #285856)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 23 martie 2009 08:12:34
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include<stdio.h>
#define DIM 101
int dx[4]={0,0,-1,1};
int dy[4]={1,-1,0,0};
struct coada
{
    int x,y;
};
coada c[DIM*40];
int n,m,ir,jr,ij,jj,a[DIM][DIM],b[DIM][DIM];
char ch;
void read ()
{
    int i,j;
    scanf("%d%d\n",&n,&m);
    for(i=1;i<=n;++i)
    {
        for(j=1;j<=m;++j)
        {
            scanf("%c",&ch);
            if(ch=='R')
            {
                ir=i;
                jr=j;
                a[i][j]=1;
            }
            if(ch=='J')
            {
                ij=i;
                jj=j;
                b[i][j]=1;
            }
            if(ch=='X')
                a[i][j]=b[i][j]=-1;            
        }
        scanf("\n");   
    }
    for(i=0;i<=n+1;++i)
        a[i][0]=a[i][m+1]=b[i][0]=b[i][m+1]=-1;
    for(i=0;i<=m+1;++i)
        a[0][i]=a[n+1][i]=b[0][i]=b[n+1][i]=-1;
}
void lee1 ()
{
    int in,sf,i;
    in=sf=1;
    c[in%40].x=ir;
    c[in%40].y=jr;
    while(in<=sf)
    {
        for(i=0;i<4;++i)
            if(a[c[in%40].x+dx[i]][c[in%40].y+dy[i]]==0)
            {
                a[c[in%40].x+dx[i]][c[in%40].y+dy[i]]=a[c[in%40].x][c[in%40].y]+1;
                ++sf;
                c[sf%40].x=c[in%40].x+dx[i];
                c[sf%40].y=c[in%40].y+dy[i];
            }
        ++in;
    }
}
void lee2 ()
{
    int in,sf,i;
    in=sf=1;
    c[in%40].x=ij;
    c[in%40].y=jj;
    while(in<=sf)
    {
        for(i=0;i<4;++i)
            if(b[c[in%40].x+dx[i]][c[in%40].y+dy[i]]==0)
            {
                b[c[in%40].x+dx[i]][c[in%40].y+dy[i]]=b[c[in%40].x][c[in%40].y]+1;
                ++sf;
                c[sf%40].x=c[in%40].x+dx[i];
                c[sf%40].y=c[in%40].y+dy[i];
            }
        ++in;
    }
}
int end ()
{
    int i,j;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            if(a[i][j]==b[i][j] && a[i][j]!=-1 && a[i][j]!=0)
            {
                printf("%d %d %d",a[i][j]-1,i,j);
                return 0;
            }
}
int main ()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    read ();
    lee1 ();
    lee2 ();
    end ();
    return 0;
}