Cod sursa(job #3191616)

Utilizator TeogaloiuMatei Ionescu Teogaloiu Data 10 ianuarie 2024 10:13:22
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream cin ("rj.in");
ofstream cout ("rj.out");
struct coord
{
    int lin,col;
};
int rom[101][101],jul[101][101];
coord vecini[8]= {{-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},{0,1},{1,1}};
bool incape(coord x,int n, int m)
{
    return x.lin>=1 and x.col>=1 and x.lin<=n and x.col<=m;
}
void lee(coord ct,int n,int m,int mat[101][101])
{
    queue <coord> q;
    q.push(ct);
    mat[ct.lin][ct.col]=1;
    while(!q.empty())
    {
        coord current=q.front();
        q.pop();
        for(int k=0; k<8; k++)
        {
            coord verif= {current.lin+vecini[k].lin,current.col+vecini[k].col};
            if(incape(verif,n,m) and mat[verif.lin][verif.col]==0)
            {
                q.push(verif);
                mat[verif.lin][verif.col]=mat[current.lin][current.col]+1;
            }
        }
    }
}
int main()
{
    int n,m;
    cin>>n>>m;
    coord r,j;
    cin.get();
    for(int i=1; i<=n; i++)
    {
        string s;
        getline(cin, s);
        for(int k=0; k<m; k++)
        {
            if(s[k]=='R')
            {
                r.lin=i;
                r.col=k+1;
            }
            else if(s[k]=='J')
            {
                j.lin=i;
                j.col=k+1;
            }
            else if(s[k]=='X')
            {
                rom[i][k+1]=-1;
                jul[i][k+1]=-1;

            }
            else
            {
                rom[i][k+1]=0;
                jul[i][k+1]=0;

            }
        }
    }
    lee(r,n,m,rom);
    lee(j,n,m,jul);
    int tmin=n*m;
    coord intalnire;
    intalnire.col=m;
    for(int i=1; i<=n; i++)
        for(int k=1; k<=m; k++)
            if(rom[i][k]==jul[i][k] and tmin>jul[i][k] and rom[i][k]>0)
            {
                intalnire.lin=i;
                intalnire.col=k;
                tmin=rom[i][k];
            }
    cout<<tmin<<' '<<intalnire.lin<<' '<<intalnire.col;
    return 0;
}