Cod sursa(job #2866273)

Utilizator luca.prunoiuluca prunoiu luca.prunoiu Data 9 martie 2022 15:55:19
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <fstream>
#include <queue>
#include <iostream>

using namespace std;
const int M=1e2;
int rom[M][M],jul[M][M],n,m;

struct coord
{
    int l,c;
}R,J,rez;
queue<coord>qu;
int lin[8]={-1,1,0,0,-1,1,-1,1};
int col[8]={0,0,-1,1,-1,-1,1,1};
bool exista_coord(coord pos)
{
    if(pos.l>=0 && pos.l<=n-1 && pos.c>=0 && pos.c<=m-1)
        return 1;
    return 0;
}
void dist(int mat[100][100], coord start)
{
    mat[start.l][start.c]=1;
    qu.push(start);
    while(!qu.empty())
    {
        coord cur;
        cur=qu.front();
        qu.pop();
        for(int i=0;i<=7;i++)
        {
            coord urm;
            urm.l=cur.l+lin[i];
            urm.c=cur.c+col[i];
            if(exista_coord(urm) && mat[urm.l][urm.c]==0)
            {
                qu.push(urm);
                mat[urm.l][urm.c]=mat[cur.l][cur.c]+1;
            }
        }
    }
}

int main()
{
    ifstream in("rj.in");
    ofstream out("rj.out");
    in>>n>>m;
    char newl;
    in.get(newl);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            char t;
            in.get(t);
            if(t=='X')
                rom[i][j]=jul[i][j]=-1;
            else if(t=='R')
            {
                R.l=i;
                R.c=j;
            }
            else if(t=='J')
            {
                J.l=i;
                J.c=j;
            }
        }
        char newl;
        in.get(newl);
    }
    dist(rom,R);
    dist(jul,J);
    int dist_min=1e5;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(rom[i][j]==jul[i][j] && rom[i][j]<dist_min && rom[i][j]>0)
            {
                dist_min=rom[i][j];
                rez.l=i+1;
                rez.c=j+1;
            }
        }
    }
    out<<dist_min<<' '<<rez.l<<' '<<rez.c;
    in.close();
    out.close();
    return 0;
}