Cod sursa(job #3129429)

Utilizator Laura139Anghel Laura Laura139 Data 14 mai 2023 15:41:50
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <fstream>
#include <queue>

using namespace std;

ifstream in("rj.in");
ofstream out("rj.out");

int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
int r[101][101],jul[101][101],n,m;

struct ura
{
    int lin,col;
};

queue <ura> q;

int einmat(ura x)
{
    return x.lin>=1 && x.lin<=n && x.col>=1 && x.col<=m;
}

void lee(int mat[101][101])
{
    while(!q.empty())
    {
        ura poz=q.front();
        q.pop();
        for(int dir=0;dir<8;dir++)
        {
            ura vecin;
            vecin.lin=poz.lin+d[dir][0];
            vecin.col=poz.col+d[dir][1];
            if(einmat(vecin)==1 && mat[vecin.lin][vecin.col]==0)
            {
                q.push(vecin);
                mat[vecin.lin][vecin.col]=mat[poz.lin][poz.col]+1;
            }
        }
    }
}

int main()
{
    ura str,stj;
    in>>n>>m;
    string row;
    getline(in, row);
    for(int i=1;i<=n;i++)
    {
        getline(in, row);
        for(int j=1;j<=m;j++)
        {
            char c = row[j-1];
            if(c==' ')
                r[i][j]=jul[i][j]=0;
            if(c=='X')
                r[i][j]=jul[i][j]=-1;
            if(c=='R')
            {
                r[i][j]=1;
                str.lin=i;
                str.col=j;
            }
            if(c=='J')
            {
                jul[i][j]=1;
                stj.lin=i;
                stj.col=j;
            }
        }
    }
    /*for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            out<<jul[i][j]<<" ";
        out<<'\n';
    }*/
    q.push(str);
    lee(r);
    /*for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            out<<r[i][j]<<" ";
        out<<'\n';
    }*/
    q.push(stj);
    lee(jul);
    int mini=100001,pozi,pozj;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(r[i][j]==jul[i][j])
                if(mini>r[i][j] && r[i][j]>1)
                {
                    mini=r[i][j];
                    pozi=i;
                    pozj=j;
                }
        }
    out<<mini<<" "<<pozi<<" "<<pozj<<'\n';
    return 0;
}