Cod sursa(job #1519385)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 7 noiembrie 2015 12:02:09
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
int N,M,R[110][110],J[110][110],i,j,rx,ry,jx,jy,fx,fy;
const int dirx[]={-1,-1,0,1,1,1,0,-1},diry[]={0,1,1,1,0,-1,-1,-1};
char rand0[110],c;
ifstream f("rj.in");
ofstream g("rj.out");
queue<int> Qx,Qy;
int main()
{
    f>>N>>M;
    for(i=1;i<=N;i++)
    {
        f>>rand0[0];
        f.getline(rand0+1,110);
        for(j=0;j<M;j++)
        {
            if(rand0[j]=='R')
            {
                rx=i;
                ry=j+1;
            }
            else if(rand0[j]=='J')
            {
                jx=i;
                jy=j+1;
            }
            else if(rand0[j]=='X')
            {
                R[i][j+1]=J[i][j+1]=-1;
            }
        }
    }

    for(i=0;i<=N+1;i++)
    {
        R[i][0]=R[i][N+1]=-1;
        J[i][0]=J[i][N+1]=-1;
    }
    for(i=0;i<=M+1;i++)
    {
        R[0][i]=R[M+1][i]=-1;
        J[0][i]=J[M+1][i]=-1;
    }
    Qx.push(rx);
    Qy.push(ry);
    R[rx][ry]=1;
    J[jx][jy]=1;
    while(!Qx.empty())
    {
        int x=Qx.front();
        int y=Qy.front();
        Qx.pop();
        Qy.pop();
        for(i=0;i<=7;i++)
        {
            if(R[x+dirx[i]][y+diry[i]]==0)
            {
                R[x+dirx[i]][y+diry[i]]=R[x][y]+1;
                Qx.push(x+dirx[i]);
                Qy.push(y+diry[i]);
            }
        }
    }
    Qx.push(jx);
    Qy.push(jy);
    while(!Qx.empty())
    {
        int x=Qx.front();
        int y=Qy.front();
        Qx.pop();
        Qy.pop();
        for(i=0;i<=7;i++)
        {
            if(J[x+dirx[i]][y+diry[i]]==0)
            {
                J[x+dirx[i]][y+diry[i]]=J[x][y]+1;
                Qx.push(x+dirx[i]);
                Qy.push(y+diry[i]);
            }
        }
    }
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=M;j++)
        {
            if(R[i][j]==J[i][j]&&R[i][j]>0)
            {
                fx=i;
                fy=j;
            }
        }
    }
    g<<R[fx][fy]<<" "<<fx<<" "<<fy;
    return 0;
}