Cod sursa(job #2537424)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 3 februarie 2020 17:45:55
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
#define baza 256
#define obs -1
queue <int>coada ;
int n,m,i,j,lr,cr,lj,cj,mini,lrasp,crasp;
char x;
short a[101][101],romeo[101][101],julieta[101][101];
int dl[]= {0,-1,-1,-1,0,  1,1,1};
int dc[]= {1, 1, 0,-1,-1,-1,0,1};
int lee(int lin,int col, short dist[101][101],int ll,int cc)
{
    int d,l,c,i;
    dist[lin][col]=1;
    coada.push(lin*baza+col);
    do
    {
        l=coada.front()/baza;
        c=coada.front()%baza;
        coada.pop();
        d=dist[l][c];
        if(ll==l&&cc==c)break;
        for(i=0; i<8; i++)
        {
            if(a[l+dl[i]][c+dc[i]]==0&&dist[l+dl[i]][c+dc[i]]==0)
            {
                coada.push((l+dl[i])*baza+c+dc[i]);
                dist[l+dl[i]][c+dc[i]]=d+1;
            }
        }
    }
    while(coada.empty()==false);


}
int main()
{
    fin>>n>>m;
   fin.get(); for(i=1; i<=n; i++)
    {

        for(j=1; j<=m; j++)
        {
            fin.get(x);
            if(x=='X') a[i][j]=obs;
            else if(x=='R')
            {
                lr=i;
                cr=j;
                a[i][j]=0;
            }
            else if(x=='J')
            {
                lj=i;
                cj=j;
                a[i][j]=0;

            }
        }
         if(x!='\n') fin.get();
    }
    for(i=0; i<=n+1; i++) a[i][0]=a[i][m+1]=obs;
    for(i=0; i<=m+1; i++) a[0][i]=a[n+1][i]=obs;
    lee(lr,cr,romeo,lj,cj);
    lee(lj,cj,julieta,lr,cr);
    mini=1000000000;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            if(romeo[i][j]==julieta[i][j]&&romeo[i][j]>0&&romeo[i][j]<mini)
            {
                mini=romeo[i][j];
                lrasp=i;
                crasp=j;
            }
        }
    }
    fout<<mini<<" "<<lrasp<<" "<<crasp;
    return 0;
}