Cod sursa(job #2685463)

Utilizator TudorNMnegoita tudor mihai TudorNM Data 17 decembrie 2020 00:07:47
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.23 kb
#include <iostream>
#include <cstdio>

using namespace std;

int ar[107][107],aj[107][107];
int ql[10007],qc[10007];///queue
///N N-E E S-E S S-V V N-V
int dl[8]= {-1,-1,0,+1,+1,+1,0,-1};
int dc[8]= {0,+1,+1,+1,0,-1,-1,-1};

int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    int n,m,j,i,prm,ult,rl,rc,jl,jc,l,c,mn=10007,poz1,poz2,ok=0;
    char x;
    cin>>n>>m;
    x=getchar();
    for(i=1; i<=n; i++)
    {
        ok=0;
        for(j=1; j<=m; j++)
        {
            x=getchar();
            if(x=='X')
                ar[i][j]=aj[i][j]=-1;
            else if(x=='R')
            {
                rl=i;
                rc=j;
            }
            else if(x=='J')
            {
                jl=i;
                jc=j;
            }
            else if(x=='\n')
            {
                j=m+1;
                ok=1;
            }
        }
        if(ok==0)
            x=getchar();
    }
    prm=1;
    ult=1;
    ql[1]=rl;
    qc[1]=rc;
    ar[rl][rc]=1;
    while(prm<=ult)
    {
        l=ql[prm];
        c=qc[prm];
        for(i=0; i<8; i++)
        {
            if(l+dl[i]>=1 && l+dl[i]<=n && c+dc[i]>=1 && c+dc[i]<=m && ar[l+dl[i]][c+dc[i]]==0)
            {
                ql[ult+1]=l+dl[i];
                qc[ult+1]=c+dc[i];
                ult++;
                ar[l+dl[i]][c+dc[i]]=ar[l][c]+1;
            }
        }
        prm++;
    }
    prm=1;
    ult=1;
    ql[1]=jl;
    qc[1]=jc;
    aj[jl][jc]=1;
    while(prm<=ult)
    {
        l=ql[prm];
        c=qc[prm];
        prm++;
        for(i=0; i<8; i++)
        {
            if(l+dl[i]>=1 && l+dl[i]<=n && c+dc[i]>=1 && c+dc[i]<=m && aj[l+dl[i]][c+dc[i]]==0)
            {
                ql[ult+1]=l+dl[i];
                qc[ult+1]=c+dc[i];
                ult++;
                aj[l+dl[i]][c+dc[i]]=aj[l][c]+1;
            }
        }
    }
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            if(ar[i][j]==aj[i][j] && ar[i][j]<mn && ar[i][j]>0)
            {
                mn=ar[i][j];
                poz1=i;
                poz2=j;
            }
        }
    }
    cout<<mn<<" "<<poz1<<" "<<poz2;
    return 0;
}