Cod sursa(job #3184651)

Utilizator Silviu643Dumitrescu Silviu Florian Silviu643 Data 16 decembrie 2023 13:28:38
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <queue>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,a[105][105],b[105][105];
char c[105];
int di[]= {1,1,0,-1,-1,-1,0,1};
int dj[]= {0,1,1,1,0,-1,-1,-1};
void Lee(int istart,int jstart, int A[105][105])
{
    queue<pair<int,int> > Q;
    Q.push(make_pair(istart, jstart));
    A[istart][jstart] = 1;
    while(! Q.empty())
    {
        int i=Q.front().first,j=Q.front().second;
        for(int k=0; k<8; k++)
        {
            int iv=i+di[k],jv=j+dj[k];
            if(iv>=1 && iv<=n && jv>=1 && jv<=m && A[iv][jv]==0)
            {
                A[iv][jv]=A[i][j]+1;
                Q.push(make_pair(iv,jv));
            }
        }
        Q.pop();
    }
}
int main()
{
    fin>>n>>m;
    int ir,jr,ij,jj;
    fin.get();
    int cnt=0;
    for(int i=1; i<=n; i++)
    {
        fin.getline(c,105);
        cnt=0;
        for(int j=1; j<=m; j++)
        {
            if(c[cnt]=='X') a[i][j]=-1,b[i][j]=-1;
            else if(c[cnt]=='R') ir=i,jr=j,a[i][j]=2;
            else if(c[cnt]=='J') ij=i,jj=j,a[i][j]=3;
            cnt++;
        }
    }
    Lee(ir,jr,a);
    Lee(ij,jj,b);
    int nr1,nr2,mn=10001;
    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 && mn>a[i][j])
        {
            mn=a[i][j];
            nr1=i,nr2=j;
        }
        fout<<mn<<" "<<nr1<<" "<<nr2;
    return 0;
}