Cod sursa(job #2495832)

Utilizator Alexandru_GaloiuAlexandru Galoiu Alexandru_Galoiu Data 19 noiembrie 2019 21:14:12
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int a[102][102], r[102][102], ju[102][102], N, M, xr,yr,xj,yj;
char ch;
struct ura{int l,c;}p;
queue <ura> coada;
int dl[]={0,1,1,1,0,-1,-1,-1},dc[]={1,1,0,-1,-1,-1,1},tmin,xmin,ymin;
void citire()
{
    fin>>N>>M;fin.get();
    for(int i=1;i<=N;i++)
    {
        for(int j=1;j<=M;j++)
        {
            fin.get(ch);
            if(ch=='X')
                a[i][j]=-1;
            else if(ch=='R')
            {
                xr=i;
                yr=j;
                a[i][j]=0;
            }
            else if(ch=='J')
            {
                xj=i;
                yj=j;
                a[i][j]=0;
            }
            else a[i][j]=0;
        }
        fin.get();
    }
    for(int i=0;i<=N+1;i++)
        a[i][0]=a[i][M+1]=-1;
    for(int i=0;i<=M+1;i++)
        a[0][i]=a[N+1][i]=-1;
}
void Lee(int x,int y,int B[102][102])
{
    for(int i=0;i<=N;i++)
        for(int j=0;j<=M;j++)
        B[i][j]=-1;
    while(!coada.empty())
        coada.pop();
        p.l=x;
        p.c=y;
        coada.push(p);
        ura pnou;
        B[x][y]=1;
        while(!coada.empty())
        {
            p=coada.front();
            coada.pop();
            for(int k=0;k<8;k++)
            {
                pnou.l=p.l+dl[k];
                pnou.c=p.c+dc[k];
                if(a[pnou.l][pnou.c]==0&&B[pnou.l][pnou.c]==-1)
                {
                    coada.push(pnou);
                    B[pnou.l][pnou.c]=B[p.l][p.c]+1;
                }
            }
        }

}
void drum_minim()
{
    tmin=103*103+5;
    xmin=ymin=-1;
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M;j++)
        if(r[i][j]==ju[i][j])
        if(r[i][j]<tmin&&r[i][j]!=-1)
    {
        tmin=r[i][j];
        xmin=i;
        ymin=j;
    }
    fout<<tmin<<" "<<xmin<<" "<<ymin<<'\n';
}
int main()
{
    citire();
    Lee(xr,yr,r);Lee(xj,yj,ju);
    drum_minim();
    return 0;
}