Cod sursa(job #2950764)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 4 decembrie 2022 17:12:39
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.21 kb
#include <fstream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
struct element
{
    int i,j;
};
element coada[20010];
int n,m,i,j,pozi,p,q,pozj,minc=-2,d,ainit,binit,afin,bfin,a[105][105],b[105][105];
int dx[]={0,1,0,-1,0,1,1,-1,-1},dy[]={0,0,1,0,-1,1,-1,1,-1};
char s[105];
int main()
{
    fin>>n>>m;
    fin.get ();
    for (i=1; i<=n; i++)
    {
        fin.getline (s,105);
        for (j=1; j<=m; j++)
        {
            if (s[j-1]==' ')
                a[i][j]=b[i][j]=0;
            if (s[j-1]=='X')
                a[i][j]=b[i][j]=-1;
            if (s[j-1]=='R')
            {
                ainit=i;
                binit=j;
            }
            if (s[j-1]=='J')
            {
                afin=i;
                bfin=j;
            }
        }
    }
    p=1;
    q=1;
    coada[q].i=ainit;
    coada[q].j=binit;
    a[ainit][binit]=1;
    while (p<=q&&a[afin][bfin]==0)
    {
        int l=coada[p].i;
        int c=coada[p].j;
        for (d=1; d<=8; d++)
        {
            int lv=l+dx[d];
            int cv=c+dy[d];
            if (lv<=n&&lv>0&&cv<=m&&cv>0)
            {
                if (a[lv][cv]==0)
                {
                    a[lv][cv]=a[l][c]+1;
                    coada[++q]= {lv,cv};
                }
            }
        }
        p++;
    }
    p=1;
    q=1;
    coada[q].i=afin;
    coada[q].j=bfin;
    b[afin][bfin]=1;
    while (p<=q&&b[ainit][binit]==0)
    {
        int l=coada[p].i;
        int c=coada[p].j;
        for (d=1; d<=8; d++)
        {
            int lv=l+dx[d];
            int cv=c+dy[d];
            if (lv<=n&&lv>0&&cv<=m&&cv>0)
            {
                if (b[lv][cv]==0)
                {
                    b[lv][cv]=b[l][c]+1;
                    coada[++q]= {lv,cv};
                }
            }
        }
        p++;
    }
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        {
            if (a[i][j]>0&&a[i][j]==b[i][j]&&(a[i][j]<minc||minc==-2))
            {
                minc=a[i][j];
                pozi=i;
                pozj=j;
            }
        }
    }
    fout<<minc<<" "<<pozi<<" "<<pozj;
    return 0;
}