Cod sursa(job #2489333)

Utilizator fabian_anghelFabian Anghel fabian_anghel Data 8 noiembrie 2019 15:58:50
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.82 kb
#include <fstream>
using namespace std;
struct punct{int x,y;} rom,jul,st[10001],p;
int n,m,r[101][102],j[101][102],mini=999999,K;
char s[101][102];
ifstream f ("rj.in");
ofstream g ("rj.out");
int main()
{
    f>>n>>m;
    f.get();
    for(int i=1;i<=n;i++)
    {
        f.getline(s[i],m+1);
        for(int k=0;k<m;k++)
        {
            if(s[i][k]=='R')
            {
                rom.x=i;
                rom.y=k+1;
            }
            else if(s[i][k]=='J')
            {
                jul.x=i;
                jul.y=k+1;
            }
            else if(s[i][k]=='X')
            {
                r[i][k+1]=-1;
                j[i][k+1]=-1;
            }
        }
    }
    K=1;
    st[K]=rom;
    for(int i=1;i<=K;i++)
    {
        if(r[st[i].x-1][st[i].y]==0 && st[i].x-1>1)
        {
            r[st[i].x-1][st[i].y]=r[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x-1;
            st[K].y=st[i].y;
        }
        if(r[st[i].x+1][st[i].y]==0 && st[i].x+1<=n)
        {
            r[st[i].x+1][st[i].y]=r[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x+1;
            st[K].y=st[i].y;
        }
        if(r[st[i].x][st[i].y-1]==0 && st[i].y-1>1)
        {
            r[st[i].x][st[i].y-1]=r[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x;
            st[K].y=st[i].y-1;
        }
        if(r[st[i].x][st[i].y+1]==0 && st[i].y+1<=m)
        {
            r[st[i].x][st[i].y+1]=r[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x;
            st[K].y=st[i].y+1;
        }
    }
    K=1;
    st[K]=jul;
    for(int i=1;i<=K;i++)
    {
        if(j[st[i].x-1][st[i].y]==0 && st[i].x-1>1)
        {
            j[st[i].x-1][st[i].y]=j[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x-1;
            st[K].y=st[i].y;
        }
        if(j[st[i].x+1][st[i].y]==0 && st[i].x+1<=n)
        {
            j[st[i].x+1][st[i].y]=j[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x+1;
            st[K].y=st[i].y;
        }
        if(j[st[i].x][st[i].y-1]==0 && st[i].y-1>1)
        {
            j[st[i].x][st[i].y-1]=j[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x;
            st[K].y=st[i].y-1;
        }
        if(j[st[i].x][st[i].y+1]==0 && st[i].y+1<=m)
        {
            j[st[i].x][st[i].y+1]=j[st[i].x][st[i].y]+1;
            K++;
            st[K].x=st[i].x;
            st[K].y=st[i].y+1;
        }
    }
    for(int i=1;i<=n;i++)
        for(int k=1;k<=m;k++)
            if(r[i][k]==j[i][k] && r[i][k]<mini && r[i][k]>=1)
            {
                mini=r[i][k];
                p.x=i;
                p.y=k;
            }
    g<<mini<<' '<<p.x<<' '<<p.y;
    f.close();
    g.close();
    return 0;
}