Cod sursa(job #3139516)

Utilizator Bianca2507Negret Bianca Bianca2507 Data 29 iunie 2023 12:50:14
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <fstream>
#include <queue>
#include <climits>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
const int dx[]= {-1,-1,-1,0,1,1,1,0};
const int dy[]= {-1,0,1,1,1,0,-1,-1};
char c;
int a[102][102],b[102][102],n,m,mini,minx,miny;

queue<pair<int,int>>q;///pt romeo
queue<pair<int,int>>q1;///pt julieta
int main()
{
    mini=INT_MAX;

    cin>>n>>m;
  cin.get(c);
    for(int i=1; i<=n; i++)
       {
           for(int j=1; j<=m; j++)
        {
            cin.get(c);
            if(c=='X')
                a[i][j]=b[i][j]=-1;
            else if(c=='R')
                a[i][j]=1,q.push(make_pair(i,j));
            else if(c=='J')
                b[i][j]=1,q1.push(make_pair(i,j));

        }
        cin.get(c);
       }
    ///lee pt romeo
    while(!q.empty())
    {
        int xs=q.front().first;
        int ys=q.front().second;
        for(int k=0; k<8; k++)
        {
            int x1=xs+dx[k];
            int y1=ys+dy[k];
            if(1<=x1 &&x1<=n &&1<=y1 &&y1<=m &&a[x1][y1]==0)
            {
                a[x1][y1]=a[xs][ys]+1;
                q.push(make_pair(x1,y1));
            }

        }
        q.pop();
    }

    ///lee pt julieta
    while(!q1.empty())
    {
        int xs=q1.front().first;
        int ys=q1.front().second;
        for(int k=0; k<8; k++)
        {
            int x1=xs+dx[k];
            int y1=ys+dy[k];
            if(1<=x1 &&x1<=n &&1<=y1 &&y1<=m &&b[x1][y1]==0)
            {
                b[x1][y1]=b[xs][ys]+1;
                q1.push(make_pair(x1,y1));
            }
        }
        q1.pop();
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        if(a[i][j]==b[i][j] &&a[i][j]>0 && mini>a[i][j])
    {
        mini=a[i][j];
        minx=i;
        miny=j;
    }
    cout<<mini<<" "<<minx<<" "<<miny;
    return 0;
}