Cod sursa(job #2568029)

Utilizator maraboneaMara Bonea marabonea Data 3 martie 2020 20:24:32
Problema Rj Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.42 kb
/**
*/
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
int a[100][100],r[100][100],jul[100][100],dl[]= {-1,-1,-1,0,1,1,1,0},dc[]= {-1,0,1,1,1,0,-1,-1,-1};
queue<int> x,y;
void drum1(int l,int c,int n,int m)
{
    x.push(l);
    y.push(c);
    while(!x.empty())
    {
        int i=x.front();
        int j=y.front();
        for(int k=0; k<8; k++)
        {
            int xx=i+dl[k];
            int yy=j+dc[k];
            if(xx>=0 && xx<n && yy>=0 && yy<m)
            {
                if(r[xx][yy]==0 && a[xx][yy]!=-1)
                {
                    r[xx][yy]=r[i][j]+1;
                    x.push(xx);
                    y.push(yy);
                }
            }
        }
        x.pop();
        y.pop();
    }
}
void drum2(int l,int c,int n,int m)
{
    x.push(l);
    y.push(c);
    while(!x.empty())
    {
        int i=x.front();
        int j=y.front();
        for(int k=0; k<8; k++)
        {
            int xx=i+dl[k];
            int yy=j+dc[k];
            if(xx>=0 && xx<n && yy>=0 && yy<m)
            {
                if(jul[xx][yy]==0 && a[xx][yy]!=-1)
                {
                    jul[xx][yy]=jul[i][j]+1;
                    x.push(xx);
                    y.push(yy);
                }
            }
        }
        x.pop();
        y.pop();
    }
}
int main()
{
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    int n,m,i=0,j,lr,cr,lj,cj,minim=1000000,soll,solc;
    char q[100];
    fin>>n>>m;
    fin.getline(q,100);
    while(i<n)
    {
        fin.getline(q,100);
        for(j=0; j<m; j++)
        {
            a[i][j]=0;
            if(q[j]=='X')
                a[i][j]=-1;
            if(q[j]=='R')
            {
                lr=i;
                cr=j;
                r[i][j]=1;
            }
            if(q[j]=='J')
            {
                lj=i;
                cj=j;
                jul[i][j]=1;
            }
        }
        i++;
    }
    drum1(lr,cr,n,m);
    drum2(lj,cj,n,m);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
        {
            if(r[i][j]==jul[i][j] && r[i][j]!=0)
            {
                if(r[i][j]<minim)
                {
                    minim=r[i][j];
                    soll=i+1;
                    solc=j+1;
                }
            }
        }
    }
    fout<<minim<<" "<<soll<<" "<<solc;
    return 0;
}