Cod sursa(job #3230177)

Utilizator chiarimitrebuiecontquestionmarkmiruna mihailescu chiarimitrebuiecontquestionmark Data 19 mai 2024 18:21:20
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<fstream>
#include<queue>
using namespace std;

char mat[101][101];
int dis1[101][101];
int dis2[101][101];
int diri[9]={0, -1, -1, 0, +1, +1, +1, 0, -1};
int dirj[9]={0, 0, +1, +1, +1, 0, -1, -1, -1};

struct coord{
int x;
int y;
};
queue<coord> a;
void lee(coord ro,int dis[101][101]){
  a.push(ro);
  dis1[ro.x][ro.y]=0;
  while(!a.empty()){
    coord urm=a.front();
    a.pop();
    for(int dir=1;dir<=8;dir++){
      coord next;
      next.x=urm.x+diri[dir], next.y=urm.y+dirj[dir];
      if(dis[next.x][next.y]==0&&mat[next.x][next.y]==' '){
        dis[next.x][next.y]=dis[urm.x][urm.y]+1;
        a.push(next);
      }
    }
  }
}

int main(){
  ifstream fin("rj.in");
  ofstream fout("rj.out");
  int n,m,mini;
  char c;
  coord ju, ro, finala;
  fin>>n>>m;
 fin.get(c);
  for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
      fin.get(mat[i][j]);
      if(mat[i][j]=='J') ju.x=i, ju.y=j;
      if(mat[i][j]=='R') ro.x=i, ro.y=j;
    }
    fin.get();
  }
  lee(ro, dis1);
  lee(ju, dis2);
  mini=10001;
  for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++){
      if(dis1[i][j]==dis2[i][j]&&mini>dis1[i][j]&&mat[i][j]==' '&&dis1[i][j]!=0){
        mini=dis1[i][j];
        finala.x=i, finala.y=j;
      }
    }
  }
  fout<<mini+1<<" "<<finala.x<<" "<<finala.y;
}