Cod sursa(job #3156897)

Utilizator Info_MasterAugustin-Ionut Info_Master Data 13 octombrie 2023 16:32:24
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
int n,m,a[1005][1005],g1,g2,b[1005][1005];
int dl[]={-1,0,1,0,-1,1,1,-1},dc[]={0,1,0,-1,1,-1,1,-1};
struct pozitie
{
    int lin,col;
};
queue <pozitie> c;
pozitie R,J;
void citire()
{
    char x;
    int i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        cin.get();
        for(j=1;j<=m;j++)
    {
        cin.get(x);
        if(x==' ')
            a[i][j]=b[i][j]=0;
        if(x=='X')
            a[i][j]=b[i][j]=-1;
        if(x=='R')
        {
            a[i][j]=1;
            R.lin=i;
            R.col=j;
        }
        if(x=='J')
        {
            b[i][j]=1;
            J.lin=i;
            J.col=j;
        }
    }
    }
}
void lee(int lin,int col,int a[1005][1005])
{
    pozitie poz1,poz2;
    c.push({lin,col});
    while(!c.empty())
    {
        poz1=c.front();
        c.pop();
        for(int i=0;i<8;i++)
        {
            poz2.lin=poz1.lin+dl[i];
            poz2.col=poz1.col+dc[i];
            if(poz2.lin>=1&&poz2.lin<=n&&poz2.col>=1&&poz2.col<=m&&a[poz2.lin][poz2.col]==0)
            {
                a[poz2.lin][poz2.col]=a[poz1.lin][poz1.col]+1;
                c.push(poz2);
            }
        }
    }
}
void afisare(int a[1005][1005])
{
    for(int i=1;i<=n;i++)
    {
    for(int j=1;j<=m;j++)
        cout<<a[i][j]<<" ";
    cout<<"\n";
    }
}
int main()
{
    int js,is,gmin=100000000;
    citire();
    lee(R.lin,R.col,a);
    lee(J.lin,J.col,b);
    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&&a[i][j]<gmin)
    {
        gmin=a[i][j];
        is=i;
        js=j;
    }
    cout<<gmin<<" "<<is<<" "<<js;
    return 0;
}