Cod sursa(job #2706939)

Utilizator StefaniaIrinaDobra Stefania-Irina StefaniaIrina Data 16 februarie 2021 09:49:21
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3 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()
{
    char c;
    f>>n>>m;
    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[i-1]=='J')
            {
                jx=i;
                jy=j;
            }
            else if(s[j-1]=='X')
            {
                matr[j][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,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;
}