Cod sursa(job #2853329)

Utilizator petru-robuRobu Petru petru-robu Data 20 februarie 2022 10:38:11
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.96 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

struct coord
{
    int x,y;
};

int n, m, rom[105][105], jul[105][105], tmin=2147483647;
coord rs, js, dir[8], meet;

void citire()
{
    fin >> n >> m;
    fin.get();
    for (int i = 1; i <= n; i++)
    {
        char ch[101];
        fin.getline(ch, m + 1);
        for (int j = 0; j < m; j++)
        {
            if (ch[j] == 'X')
            {
                rom[i][j+1]=-1;
                jul[i][j+1]=-1;
            }
            if (ch[j] == 'R')
            {
                rs.x=i;
                rs.y=j+1;
            }
            if (ch[j] == 'J')
            {
                js.x=i;
                js.y=j+1;
            }
        }
    }

    for(int j=0;j<=n;j++)
    {
        rom[0][j]=-1;
        rom[n+1][j]=-1;
        rom[j][0]=-1;
        rom[j][n+1]=-1;
        jul[0][j]=-1;
        jul[n+1][j]=-1;
        jul[j][0]=-1;
        jul[j][n+1]=-1;
    }
}

void dirset()
{
  dir[0].x=0;dir[0].y=-1;
  dir[1].x=-1;dir[1].y=0;
  dir[2].x=0;dir[2].y=1;
  dir[3].x=1;dir[3].y=0;
  dir[4].x=1;dir[4].y=1;
  dir[5].x=-1;dir[5].y=-1;
  dir[6].x=-1;dir[6].y=1;
  dir[7].x=1;dir[7].y=-1;
}

void leeRomeo()
{
  queue<coord> q;
  coord el, next;
  q.push(rs);
  rom[rs.x][rs.y]=1;
  while(!q.empty())
  {
    el=q.front();
    q.pop();
    for(int i=0;i<8;i++)
    {
      next.x=el.x+dir[i].x;
      next.y=el.y+dir[i].y;
      if(rom[next.x][next.y]==0)
      {
        q.push(next);
        rom[next.x][next.y]=rom[el.x][el.y]+1;
      }
    }
  }
}

void leeJulieta()
{
  queue<coord> q;
  coord el, next;
  q.push(js);
  jul[js.x][js.y]=1;
  while(!q.empty())
  {
    el=q.front();
    q.pop();
    for(int i=0;i<8;i++)
    {
      next.x=el.x+dir[i].x;
      next.y=el.y+dir[i].y;
      if(jul[next.x][next.y]==0)
      {
        q.push(next);
        jul[next.x][next.y]=jul[el.x][el.y]+1;
      }
    }
  }
}


int main()
{
    citire();
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cout<<jul[i][j]<<' ';
        }
        cout<<'\n';
    }cout<<'\n';

    dirset();
    leeRomeo();
    leeJulieta();

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cout<<rom[i][j]<<' ';
        }
        cout<<'\n';
    }cout<<'\n';

    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
            cout<<jul[i][j]<<' ';
        }
        cout<<'\n';
    }cout<<'\n';


    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
        {
          if(rom[i][j]!=-1&&rom[i][j]!=0&&rom[i][j]==jul[i][j])
          {
            if(rom[i][j]<tmin)
            {
              tmin=rom[i][j];
              meet.x=i;
              meet.y=j;
            }
          }
        }

    }

    fout<<tmin<<' '<<meet.x<<' '<<meet.y;

    return 0;
}