Cod sursa(job #2640762)

Utilizator casian307Marincas Casian casian307 Data 8 august 2020 02:54:24
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.47 kb
#include <fstream>
#include <cstring>
#include <iostream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");

const int NMAX=105, dl[]={-1,0,1,0}, dc[]={0,1,0,-1};
struct pozitie{
    int x,y;
}coada[NMAX*NMAX];
pozitie Romeo, Julieta,Plecare;
int n,m;
int intalnirex,intalnirey;
char matrice[NMAX][NMAX]; int rezolvare1[NMAX][NMAX], rezolvare2[NMAX][NMAX];
void citire()
{
    char s[NMAX];
    f>>n>>m; f.get();
    for(int i=0;i<n;i++)
    {
        f.getline(s,NMAX);
        for(int j=0;j<m;j++)
            matrice[i][j]=s[j];
    }
}
/*void afisare()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
            cout<<rezolvare[i][j];
        cout<<'\n';
    }
}*/
void crMatrice()
{
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
          {
            if(matrice[i][j]=='X')
                rezolvare1[i][j]=rezolvare2[i][j]=-1;
            if(matrice[i][j]=='R')
            {
                Romeo.x=i;
                Romeo.y=j;
                rezolvare1[i][j]=1;
            }
            if(matrice[i][j]=='J')
            {
                Julieta.x=i;
                Julieta.y=j;
                rezolvare2[i][j]=1;
          }
        }
    }
}
bool ok(pozitie a)
{
    return (a.x>=0&&a.x<n&&a.y>=0&&a.y<m);
}
void Lee(pozitie Plecare, int rezolvare[105][105])
{
    pozitie container,vecin;
    coada[1]=Plecare;
    int prim,ultim;
    prim=ultim=1;
    while(prim<=ultim)
    {
        container=coada[prim];
        prim++;
        for(int i=0;i<4;i++)
        {
            vecin.x=container.x+dl[i];
            vecin.y=container.y+dc[i];
            if(ok(vecin))
            {
                if(rezolvare[vecin.x][vecin.y]==0)
                  {
                      rezolvare[vecin.x][vecin.y]=rezolvare[container.x][container.y]+1;
                      coada[++ultim]=vecin;
                  }
            }

        }
    }
}


int main()
{
    int cx,cy;
    int minim=99999999999;
    citire();
    crMatrice();
    Lee(Romeo,rezolvare1);
    Lee(Julieta,rezolvare2);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
    {
        if(rezolvare1[i][j]==rezolvare2[i][j]&&rezolvare1[i][j]!=-1&&rezolvare1[i][j]!=0)
        {
            if(rezolvare1[i][j]<minim)
            {
                minim=rezolvare1[i][j];
                cx=i;
                cy=j;
            }
        }
    }
    cout<<minim-1<<' '<<cx+1<<' '<<cy+1;


}