Cod sursa(job #1554554)

Utilizator Julian.FMI Caluian Iulian Julian. Data 21 decembrie 2015 14:26:10
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
#define nmax 105
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int dx[]={0,1,0,-1,1,-1,1,-1};
int dy[]={1,0,-1,0,1,1,-1,-1};
int ro[nmax][nmax],ju[nmax][nmax];
int qx[nmax*nmax],qy[nmax*nmax];
int main()
{int n,m,i,j,in,sf,rx,ry,jx,jy,px,py,pux,puy;
char s[nmax];
    fin>>n>>m;
    fin.get();

    for(i=1;i<=n;i++)
    {fin.getline(s,nmax);
    for(j=1;j<=m;j++)
        if(s[j-1]=='X'){ro[i][j]=-1;ju[i][j]=-1;}
        else if(s[j-1]=='R'){rx=i;ry=j;}
        else if(s[j-1]=='J'){jx=i;jy=j;}
    }
for(i=0;i<=n+1;i++)
    ro[i][0]=ro[i][m+1]=ju[i][0]=ju[i][m+1]=-1;
for(i=0;i<=m+1;i++)
    ro[0][i]=ro[n+1][i]=ju[0][i]=ju[n+1][i]=-1;

in=sf=0;
ro[rx][ry]=1;
qx[in]=rx;qy[in]=ry;
while(in<=sf)
{pux=qx[in];puy=qy[in++];
    for(i=0;i<8;i++)
    {px=pux+dx[i];py=puy+dy[i];
    if(!ro[px][py])
        {ro[px][py]=1+ro[pux][puy];
         qx[++sf]=px;    qy[sf]=py;}
    }
}

in=sf=0;
ju[jx][jy]=1;
qx[in]=jx;qy[in]=jy;
while(in<=sf)
{pux=qx[in];puy=qy[in++];
    for(i=0;i<8;i++)
    {px=pux+dx[i];py=puy+dy[i];
    if(!ju[px][py])
        {ju[px][py]=1+ju[pux][puy];
         qx[++sf]=px;    qy[sf]=py;}
    }
}

int minim =5555;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
if(ro[i][j]>0 && ro[i][j]==ju[i][j] && ro[i][j]<minim){minim=ro[i][j];rx=i;ry=j;}

fout<<minim<<' '<<rx<<' '<<ry;

}