Cod sursa(job #922083)

Utilizator timicsIoana Tamas timics Data 21 martie 2013 22:00:46
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.99 kb
#include<stdio.h>
char c[110];
int N,M,a[110][110],b[110][110],qjl[10100],qjc[10100],qrl[10100],qrc[10100],jl,jc,rl,rc,ok=0,ret1,ret2,ret3;
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d\n",&N,&M);
    for(int i=1;i<=N;++i)
    {
        gets(c);
        for(int j=0;j<=M-1;++j)
        {
            if(c[j]=='X')
            {
                a[i][j+1]=-1;
                b[i][j+1]=-1;
            }
            if(c[j]=='J')
            {
                jl=i;
                jc=j+1;
            }
            if(c[j]=='R')
            {
                rl=i;
                rc=j+1;
            }
        }
    }
    int first=0;
    int last=0;
    a[jl][jc]=1;
    qjl[0]=jl;
    qjc[0]=jc;

    while(a[rl][rc]==0)
    {
        if(qjc[first]<N)
        if(a[qjl[first]][qjc[first]+1]==0)
        {
            a[qjl[first]][qjc[first]+1]=a[qjl[first]][qjc[first]]+1;
            ++last;
            qjl[last]=qjl[first];
            qjc[last]=qjc[first]+1;
        }
        if(qjc[first]>1)
        if(a[qjl[first]][qjc[first]-1]==0)
        {
            a[qjl[first]][qjc[first]-1]=a[qjl[first]][qjc[first]]+1;
            ++last;
            qjl[last]=qjl[first];
            qjc[last]=qjc[first]-1;
        }
        if(qjl[first]<N)
        if(a[qjl[first]+1][qjc[first]]==0)
        {
            a[qjl[first]+1][qjc[first]]=a[qjl[first]][qjc[first]]+1;
            ++last;
            qjl[last]=qjl[first]+1;
            qjc[last]=qjc[first];
        }
        if(qjl[first]>1)
        if(a[qjl[first]-1][qjc[first]]==0)
        {
            a[qjl[first]-1][qjc[first]]=a[qjl[first]][qjc[first]]+1;
            ++last;
            qjl[last]=qjl[first]-1;
            qjc[last]=qjc[first];
        }
        ++first;
    }

    first=0;
    last=0;
    b[rl][rc]=1;
    qrl[0]=rl;
    qrc[0]=rc;

    while(b[jl][jc]==0)
    {
        if(qrc[first]<N)
        if(b[qrl[first]][qrc[first]+1]==0)
        {
            b[qrl[first]][qrc[first]+1]=b[qrl[first]][qrc[first]]+1;
            if(b[qrl[first]][qrc[first]+1]==a[qrl[first]][qrc[first]+1])
            {
                ret1=b[qrl[first]][qrc[first]+1];
                ret2=qrl[first];
                ret3=qrc[first]+1;
                break;
            }
            ++last;
            qrl[last]=qrl[first];
            qrc[last]=qrc[first]+1;
        }
        if(qrc[first]>1)
        if(b[qrl[first]][qrc[first]-1]==0)
        {
            b[qrl[first]][qrc[first]-1]=b[qrl[first]][qrc[first]]+1;
            if(b[qrl[first]][qrc[first]-1]==a[qrl[first]][qrc[first]-1])
            {
                ret1=b[qrl[first]][qrc[first]-1]-1;
                ret2=qrl[first];
                ret3=qrc[first]-1;
                break;
            }
            ++last;
            qrl[last]=qrl[first];
            qrc[last]=qrc[first]-1;
        }
        if(qrl[first]<N)
        if(b[qrl[first]+1][qrc[first]]==0)
        {
            b[qrl[first]+1][qrc[first]]=b[qrl[first]][qrc[first]]+1;
            if(b[qrl[first]+1][qrc[first]]==a[qrl[first]+1][qrc[first]])
            {
                ret1=b[qrl[first]+1][qrc[first]]-1;
                ret2=qrl[first]+1;
                ret3=qrc[first];
                break;
            }
            ++last;
            qrl[last]=qrl[first]+1;
            qrc[last]=qrc[first];
        }
        if(qrl[first]>1)
        if(b[qrl[first]-1][qrc[first]]==0)
        {
            b[qrl[first]-1][qrc[first]]=b[qrl[first]][qrc[first]]+1;
            if(b[qrl[first]-1][qrc[first]]==a[qrl[first]-1][qrc[first]])
            {
                ret1=b[qrl[first]-1][qrc[first]]-1;
                ret2=qrl[first]-1;
                ret3=qrc[first];
                break;
            }
            ++last;
            qrl[last]=qrl[first]-1;
            qrc[last]=qrc[first];
        }
        ++first;
    }

    printf("%d %d %d",ret1,ret2,ret3);
    return 0;
}