Cod sursa(job #2208403)

Utilizator AnnaLipianuLipianu Ana AnnaLipianu Data 29 mai 2018 17:11:48
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.52 kb
#include <cstdio>
struct ura
{
    int linie, col;
}coada[12000];
int dirL[8]={-1,-1,0,1,1,1,0,-1},dirC[8]={0,1,1,1,0,-1,-1,-1},a[105][105],b[105][105];
char x,sir[102];
int main()
{
    int n,m,i,inc,sf,x,y,xi,yi,xf,yf,l,c,j,pozi,pozj;
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d%d%c",&n,&m,&c);
    for(i=0;i<=n+1;i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
        b[i][0]=-1;
        b[i][m+1]=-1;
    }
    for(j=0;j<=m+1;j++)
    {
        a[0][j]=-1;
        a[n+1][j]=-1;
        b[0][j]=-1;
        b[n+1][j]=-1;
    }
    for(i=1;i<=n;i++)
    {
        gets(sir);
        for(j=0;j<m;j++)
        {
        x=sir[j];
        if(x==' '){
            a[i][j+1]=0;
            b[i][j+1]=0;
                    }
        else
            if(x=='R')
            {
                xi=i;
                yi=j+1;
            }
            else
                if(x=='J')
                {
                    xf=i;
                    yf=j+1;
                }
                else {
                    a[i][j+1]=-1;
                    b[i][j+1]=-1;
                }
        }
    }

    inc=sf=1;
    coada[1].linie=xi;
    coada[1].col=yi;
    a[xi][yi]=1;
    while(inc<=sf)
    {
        for(i=0;i<=7;i++)
        {
            l=coada[inc].linie+dirL[i];
            c=coada[inc].col+dirC[i];
            if(a[l][c]==0)
            {
                sf++;
                coada[sf].linie=l;
                coada[sf].col=c;
                a[l][c]=a[coada[inc].linie][coada[inc].col]+1;
            }
        }
        inc++;
    }
    inc=sf=1;
    coada[1].linie=xf;
    coada[1].col=yf;
    b[xf][yf]=1;
     int mi=12001;
    while(inc<=sf)
    {
        for(i=0;i<=7;i++)
        {
            l=coada[inc].linie+dirL[i];
            c=coada[inc].col+dirC[i];
            if(b[l][c]==0)
            {
                sf++;
                coada[sf].linie=l;
                coada[sf].col=c;
                b[l][c]=b[coada[inc].linie][coada[inc].col]+1;
            }
        }
        inc++;
    }
    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)
    if(a[i][j]<mi)
    {
        mi=a[i][j];
        pozi=i;
        pozj=j;
    }
    else if(a[i][j]==mi)
            {
                if(pozj>j)
                {
                    pozi=i;
                    pozj=j;
                }
            }
        printf("%d %d %d",mi,pozi,pozj);
    return 0;
}