Cod sursa(job #2109591)

Utilizator andreipredaAndrei Preda andreipreda Data 19 ianuarie 2018 21:55:54
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
#include <bits/stdc++.h>
#define dim 101

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

queue < pair <int,int> >coada;

int dx[]={-1,-1,1,1,0,-1,0,-1};
int dy[]={0,1,0,1,1,1,1,-1,-1};

int n,m,i,j,xi,yi,xf,yf,x=-1,y=-1;
int mr[dim][dim],mj[dim][dim];
int t=999999999;

void read()
{
    char sir[256];
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin.get();
        fin.get(sir,sizeof(sir));
        for(j=1;j<=m;j++)
        {
            if(sir[j-1]=='R')
            {
                xi=i;yi=j;
                mr[i][j]=1;
                mj[i][j]=1;
            }
            else if(sir[j-1]=='J')
            {
                xf=i;yf=j;
                mr[i][j]=1;
                mj[i][j]=1;
            }
            if(sir[j-1]=='X')
            {
                mr[i][j]=1;
                mj[i][j]=1;
            }
            else
            {
                mr[i][j]=0;
                mj[i][j]=0;
            }
        }
     }
     fin.close();
}

bool inMap(int i,int j,int Map[dim][dim])
{
    if(i<1 || j<1 || i>n || j>m)
        return false;
    if(Map[i][j]!=0)
        return false;
    return true;
}

/*void look(int Map[dim][dim])
{
    for(i=1;i<=n;i++)
     {
         for(j=1;j<=m;j++)
         {
             fout<<Map[i][j]<<" ";
         }
         fout<<endl;
     }
} */

void lee(int Map[dim][dim],int xi,int yi)
{
    int i,j,inext,jnext;
    Map[xi][yi]=1;
    coada.push(make_pair(xi,yi));
    while(!coada.empty())
    {
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();
        for(int k=0;k<8;k++)
        {
            inext=i+dx[k];
            jnext=j+dy[k];
            if(inMap(inext,jnext,Map)==true && Map[inext][jnext]==0)
            {
                coada.push(make_pair(inext,jnext));
                Map[inext][jnext]=Map[i][j]+1;
            }
        }
    }
}

void mrj()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(mr[i][j] == mj[i][j])
            {
                if(mr[i][j]<t && mr[i][j]!=1)
                {
                    x=i;
                    y=j;
                    t=mr[i][j];
                }
            }
        }
    }
    fout<<x<<' '<<y<<' '<<t;
    return;
}

int main()
{
    int x,y,time;
    read();
    lee(mr,xi,yi);
    lee(mj,xf,yf);
    //look(mr);
    //look(mj);
    mrj();
    fout.close();
    return 0;
}