Cod sursa(job #2706941)

Utilizator StefaniaIrinaDobra Stefania-Irina StefaniaIrina Data 16 februarie 2021 09:53:27
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.01 kb
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
#define NMAX 110
#define N 1001
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue <int> Qx,Qy;
int n,m,rx,ry,jx,jy,matr[NMAX][NMAX],matj[NMAX][NMAX];
char s[1000];
void citire()
{
f>>n>>m;
    char c;
    f.get();
    for (int i=1;i<=n;++i)
    {
        f.getline(s,1000);
        for (int j=1;j<=m;++j)
        {
            if (s[j-1]=='R')
            {
                rx=i;
                ry=j;
            }
            else if(s[j-1]=='J')
            {
                jx=i;
                jy=j;
            }
            else if(s[j-1]=='X')
            {
                matr[i][j]=matj[i][j]=-1;
            }
        }
    }
}
void lee(int ix,int iy,int a[NMAX][NMAX])
{
    a[ix][iy]=1;
    Qx.push(ix);
    Qy.push(iy);
    while(!Qx.empty())
    {
        ix=Qx.front();
        iy=Qy.front();
        if (ix-1>0 && a[ix-1][iy]==0)
        {
            Qx.push(ix-1);
            Qy.push(iy);
            a[ix-1][iy]=a[ix][iy]+1;
        }
        if (ix-1>0 && iy-1>0  && a[ix-1][iy-1]==0)
        {
            Qx.push(ix-1);
            Qy.push(iy-1);
            a[ix-1][iy-1] = a[ix][iy]+1;
        }
        if (ix-1>0 && iy+1<=m && a[ix-1][iy+1]==0)
        {
            Qx.push(ix-1);
            Qy.push(iy+1);
            a[ix-1][iy+1]=a[ix][iy]+1;
        }
        if (iy-1>0 && a[ix][iy-1]==0)
        {
            Qx.push(ix);
            Qy.push(iy-1);
            a[ix][iy-1] = a[ix][iy]+1;
        }
        if (iy+1<=m && a[ix][iy+1] == 0)
        {
            Qx.push(ix);
            Qy.push(iy+1);
            a[ix][iy+1]=a[ix][iy]+1;
        }
        if (ix+1<=n && iy-1>0 && a[ix+1][iy-1]==0)
        {
            Qx.push(ix+1);
            Qy.push(iy-1);
            a[ix+1][iy-1]=a[ix][iy]+1;
        }
        if(ix+1<=n && a[ix+1][iy]==0)
        {
            Qx.push(ix+1);
            Qy.push(iy);
            a[ix+1][iy]=a[ix][iy]+1;
        }
        if (ix+1<=n && iy+1<=m  && a[ix+1][iy+1]==0)
        {
            Qx.push(ix+1);
            Qy.push(iy+1);
            a[ix+1][iy+1]=a[ix][iy]+1;
        }
        Qx.pop();
        Qy.pop();

    }
}
void afisare()
{
   int mi=999999999;
    int mx=0,my=0;
    for (int i=1;i<=n;++i)
        for (int j=1;j<=m;++j)
            if(matr[i][j]==matj[i][j] && matr[i][j]<mi && matr[i][j]>0)
            {
                mi=matr[i][j];
                mx=i;
                my=j;
            }
    g<<mi<<" "<<mx<<" "<<my<<'\n';
}
void verificare()
{
    g<<'\n';
    for (int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
            g<<matr[i][j]<<" ";
        g<<'\n';
    }
    g<<'\n';
    for(int i=1;i<=n;++i)
    {
        for(int j=1;j<=m;++j)
            g<<matj[i][j]<<" ";
        g<<'\n';
    }
}
int main()
{
    citire();
    lee(rx,ry,matr);
    lee(jx,jy,matj);
    afisare();
    f.close();
    g.close();
    return 0;
}