Cod sursa(job #2413255)

Utilizator AlexNeaguAlexandru AlexNeagu Data 23 aprilie 2019 10:52:44
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.95 kb
#include <fstream>
#include <queue>
#include <string>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
#define NMAX 105
queue < pair < int, int > > C;
pair < int, int > Coordonate;
int MIN=2000000;
int dx[8]={-1,0,1,0,-1,-1,1,1};
int dy[8]={0,1,0,-1,-1,1,-1,1};
int T_Rom[NMAX][NMAX];
int T_Jul[NMAX][NMAX];
int N,M,sr,sj,fr,fj;
string S;
bool ok(int x, int y)
{
    if (x<1||y<1||x>N||y>M)
    return false;
    return true;
}
void Lee(int i, int j, int k)
{
    C.push(make_pair(i,j));
    while (!C.empty())
    {
        int x=C.front().first;
        int y=C.front().second;
        C.pop();
        for (int directie =0; directie < 8; directie ++)
        {
            int x_nou=x+dx[directie];
            int y_nou=y+dy[directie];
            if (k==1)
            if (ok(x_nou,y_nou)&&!T_Rom[x_nou][y_nou])
            {
                C.push(make_pair(x_nou,y_nou));
                T_Rom[x_nou][y_nou]=T_Rom[x][y]+1;
            }
            if (k==2)
            if (ok(x_nou,y_nou)&&!T_Jul[x_nou][y_nou])
            {
                C.push(make_pair(x_nou,y_nou));
                T_Jul[x_nou][y_nou]=T_Jul[x][y]+1;
            }

        }
    }
}
int main()
{
    fin>>N>>M;
    getline(fin, S);
    for (int i=1; i<=N; i++)
    {
        getline(fin,S);
        for (int j=0; j<S.size(); j++)
        {
            if (S[j]=='X')
            T_Rom[i][j+1]=T_Jul[i][j+1]=-1;
            if (S[j]=='R') {
                sr=i,fr=j+1; T_Rom[sr][fr]=1; }
            if (S[j]=='J') {
                sj=i,fj=j+1; T_Jul[sj][fj]=1; }
        }
    }
    Lee(sr,fr,1);
    Lee(sj,fj,2);
    for (int i=1; i<=N; i++)
        for (int j=1; j<=M; j++)
        if (T_Rom[i][j]==T_Jul[i][j]&&T_Rom[i][j]>0)
        if (T_Rom[i][j]<MIN)
    {
        MIN=T_Rom[i][j];
        Coordonate.first=i;
        Coordonate.second=j;
    }
  fout<<MIN<<" "<<Coordonate.first<<" "<<Coordonate.second;
}