Cod sursa(job #2457538)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 17 septembrie 2019 23:12:38
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.31 kb
#include <iostream>
#include <fstream>
#define MAX 105

using namespace std;

ifstream fin  ("rj.in");
ofstream fout ("rj.out");

int dirx[]={-1, -1, 0, 1, 1, 1 , 0 , -1};
int diry[]={0 , 1 , 1, 1, 0, -1, -1, -1};
int st, dr, cx[MAX], cy[MAX];


int n, m, minn, isol, jsol;
int ir, jr, ij, jj;
int board[MAX][MAX], ro[MAX][MAX], ju[MAX][MAX];


inline bool isOk(int i, int j){
      if(i < 1 || j < 1 || i > n || j > m || board[i][j] == 1)
            return false;
      return true;
}
void parc(int i, int j, int v[MAX][MAX]){

      int x, y, nx, ny;
      bool ok=true;

      st=1;
      dr=1;
      cx[1]=i;
      cy[1]=j;

      while(st <= dr && ok){
            x=cx[st];
            y=cy[st];

            for(int pas=0; pas <= 7 && ok; pas++){

                  nx=x + dirx[pas];
                  ny=y + diry[pas];
                  if(isOk(nx, ny) && !v[nx][ny]){
                        v[nx][ny]=v[x][y] + 1;
                        dr++;
                        cx[dr]=nx;
                        cy[dr]=ny;
                  }
            }

            st++;
      }

      return;
}


int main (){
      ///1 -> Blocaj
      ///2 -> Romeo
      ///3 -> Julieta

      fin>>n;
      fin>>m;

      char c[MAX];
      fin.getline(c, MAX);

      for(int i=1; i<=n; i++){
            fin.getline(c, MAX);

            for(int j=0; c[j] != 0; j++){

                  if(c[j] == 'X')
                        board[i][j+1]=1;

                  if(c[j] == 'R'){
                        board[i][j+1]=2;

                        ir=i;
                        jr=j+1;
                        ro[i][j+1]=1;
                  }

                  if(c[j] == 'J'){
                        board[i][j+1]=3;

                        ij=i;
                        jj=j+1;
                        ju[i][j+1]=1;
                  }
            }
      }

      parc(ir, jr, ro);
      parc(ij, jj, ju);

      minn=INT_MAX;
      for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
                  if(ro[i][j] == ju[i][j] && ro[i][j] != 0 && ro[i][j] < minn){
                        minn=ro[i][j];
                        isol=i;
                        jsol=j;
                  }
      fout<<minn<<" "<<isol<<" "<<jsol;

      return 0;
}