Cod sursa(job #3231027)

Utilizator BogdanBurescuBogdan Burescu BogdanBurescu Data 23 mai 2024 21:26:41
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <fstream>
#include <queue>
#include <cstring>

using namespace std;

ifstream cin ("rj.in");
ofstream cout ("rj.out");

int n,m,i,j,xr,yr,xj,yj,b1[105][105],b2[105][105],v[105][105];
char a[10005];

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

queue<pair<int,int>>q;

void Lee(int x,int y,int b[105][105])
{
    b[x][y]=1;
    q.push({x,y});
    while(!q.empty())
    {
        int i=q.front().first,j=q.front().second;
        for(int kk=0;kk<8;kk++)
        {
            int xnou=i+dx[kk];
            int ynou=j+dy[kk];
            if(xnou>=0 && xnou<n && ynou>=0 && ynou<m && b[xnou][ynou]==0 && v[xnou][ynou]==0)
            {
                q.push({xnou,ynou});
                b[xnou][ynou]=b[i][j]+1;
            }
        }
        q.pop();
    }
}

int main()
{
    //ios_base::sync_with_stdio(false);
    //cin.tie(NULL);
    cin>>n>>m;
    cin.getline(a,105);
    for(i=0;i<n;i++)
    {
        cin.getline(a,105);
        for(j=0;j<m;j++)
        {
            if(a[j]=='X')
                v[i][j]=1;
            if(a[j]=='R')
            {
                xr=i;
                yr=j;
            }
            if(a[j]=='J')
            {
                xj=i;
                yj=j;
            }
        }
    }
    Lee(xr,yr,b1);
    Lee(xj,yj,b2);
    int mini=1e9,xx=0,yy=0;
    for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                if(b1[i][j]==b2[i][j] && b1[i][j]<mini && b1[i][j]!=0)
                {
                    mini=b1[i][j];
                    xx=i+1;
                    yy=j+1;
                }
            }
        }
    cout<<mini<<' '<<xx<<' '<<yy;
    return 0;
}