Cod sursa(job #3184812)

Utilizator Vlad_prisVlad Prismareanu Vlad_pris Data 16 decembrie 2023 21:36:01
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct coord{
    int lin;
    int col;
};
const int dirlin[8]={-1,-1,0,1,1,1,0,-1};
const int dircol[8]={0,1,1,1,0,-1,-1,-1};
int n,m;
bool in_mat(coord i)
{
    return (i.lin>=1 && i.lin<=n) &&(i.col>=1 && i.col<=m);
}
queue<coord> q;

void Lee(coord st,int dist[][105])
{
    dist[st.lin][st.col]=1;
    q.push(st);
    while(!q.empty())
    {
        coord curent=q.front();
        q.pop();
        for(int dir=0;dir<8;dir++)
        {
            coord vec;
            vec.lin=curent.lin+dirlin[dir];
            vec.col=curent.col+dircol[dir];
            if(in_mat(vec) && dist[vec.lin][vec.col]==0)
            {
                q.push(vec);
                dist[vec.lin][vec.col]=dist[curent.lin][curent.col]+1;
            }
        }
    }
}


int main()
{
    fin>>n>>m;
    string line;
    getline(fin,line);
            
    int dist_r[105][105]={0};
    int dist_j[105][105]={0};
    coord romeo,julieta;
    for(int i=1; i<=n; i++)
    {
        getline(fin,line);
        for(int j=1; j<=m; j++)
        {
            if(line[j-1]=='R')
            {
                romeo.lin=i;
                romeo.col=j;
            }
            if(line[j-1]== 'X')
            {
                dist_r[i][j]=-1;
                dist_j[i][j]=-1;
            }
            if(line[j-1]=='J')
            {
                julieta.lin=i;
                julieta.col=j;
            }
    }
        
        }
    Lee(romeo,dist_r);
    Lee(julieta,dist_j);
    int tmini=10001;
    coord posmin={0,0};
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            if(dist_r[i][j]==dist_j[i][j] && dist_r[i][j]>0 && tmini>dist_r[i][j])
            {
                tmini=dist_r[i][j];
                posmin.lin=i;
                posmin.col=j;
            }
        
    }
        
    
    fout<<tmini<<' '<<posmin.lin<<' '<<posmin.col;
    return 0;
}