Cod sursa(job #1565424)

Utilizator RG1999one shot RG1999 Data 10 ianuarie 2016 19:07:30
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <cstdio>
using namespace std;
int dx[]={0,1,0,-1,1,-1,1,-1};
int dy[]={1,0,-1,0,1,1,-1,-1};
int a[105][105],b[105][105],i,j,in,sf,n,m,l1,c1,l2,c2,qx[10000],qy[10000],x,y,px,py,min1,cate;
char c;
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    scanf("%d %d",&n,&m);
    min1=99999;
  j=0;
    i=1;
    cate=0;
     scanf("%c",&c);
    while(i<=n)
        {
        scanf("%c",&c);
        if(c=='X')
        {
            j++;
            a[i][j]=-1;
        b[i][j]=-1;

        }
        if(c=='\n')
        {
            i++;
            j=0;
        }
        if(c==' ')
            j++;

        if(c=='J')
        {
            j++;
            l2=i;
            c2=j;

        }
          if(c=='R')
        {
            j++;
            l1=i;
            c1=j;

        }

        }
    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;

        in=1;
        sf=1;
        a[l1][c1]=1;
        qx[in]=l1;
        qy[in]=c1;
        while(in<=sf)
        {
            x=qx[in];
            y=qy[in++];
            for(i=0;i<8;i++)
            {
                px=x+dx[i];
                py=y+dy[i];
                if(!a[px][py])
                {
                    a[px][py]=1+a[x][y];
                    qx[++sf]=px;
                    qy[sf]=py;
                }
            }
        }
        in=1;
        sf=1;
        b[l2][c2]=1;
        qx[in]=l2;
        qy[in]=c2;
        while(in<=sf)
        {
            x=qx[in];
            y=qy[in++];
            for(i=0;i<8;i++)
            {
                px=x+dx[i];
                py=y+dy[i];
                if(!b[px][py])
                {
                    b[px][py]=1+b[x][y];
                    qx[++sf]=px;
                    qy[sf]=py;
                }
            }
        }
        for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
if(a[i][j]>0 && a[i][j]==b[i][j] && a[i][j]<min1){min1=a[i][j];l1=i;c1=j;}
printf("%d %d %d",min1,l1,c1);



    return 0;
}