Cod sursa(job #2701726)

Utilizator KarinAAndrei Karina KarinA Data 1 februarie 2021 15:16:25
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;

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

int distr[105][105],distj[105][105];
int n,m;
queue <pair <int,int> > q;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};

bool ok(int i, int j)
{
    return (i>=1 && i<=n && j>=1 && j<=m);
}

void Lee(int i, int j, int dist[][105])
{
    dist[i][j]=1;
    q.push(make_pair(i,j));
    while(!q.empty())
    {
        int x=q.front().first;
        int y=q.front().second;
        q.pop();
        for(int dir=0;dir<8;dir++)
        {
            int inext=x+dx[dir];
            int jnext=y+dy[dir];
            if(ok(inext,jnext)==false || dist[inext][jnext]!=0)
            {
                continue;
            }
            dist[inext][jnext]=dist[x][y]+1;
            q.push(make_pair(inext,jnext));
        }

    }
}

void afisare(int dist[][105])
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cout<<dist[i][j]<<" ";
        }
        cout<<'\n';
    }
            ///out<<'\n';
}

int main()
{
    char s[105];
    int minn=2000000000,pozi,pozj;
    int ri,rj,ji,jj;
    in>>n>>m;
    in.get();
    for(int i=1;i<=n;i++)
    {
        in.getline(s+1,101);
        for(int j=1;j<=m;j++)
        {
            char c;
            c=s[j];
            if(c=='R')
            {
                ri=i;
                rj=j;
            }
            if(c=='J')
            {
                ji=i;
                jj=j;
            }
            if(c=='X')
            {
                distr[i][j]=-1;
                distj[i][j]=-1;
            }
        }
    }
    Lee(ri,rj,distr);
    Lee(ji,jj,distj);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(distj[i][j]==distr[i][j] && distj[i][j]>0)
            {
                if(distj[i][j]<minn)
                {
                    minn=distj[i][j];
                    pozi=i;
                    pozj=j;
                }
            }
        }
    }
    out<<minn<<" "<<pozi<<" "<<pozj;
    return 0;
}