Cod sursa(job #2456573)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 14 septembrie 2019 18:21:08
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.51 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define MAXN 999999999

using namespace std;

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

int n, m;
int v[105][105], ro[105][105], ju[105][105];
int minn, ii, jj;

void pr(int i, int j, int val){
      ro[i][j]=val;

      if(i < n && v[i+1][j] == 1 && val+1 < ro[i+1][j])
            pr(i+1, j, val+1);

      if(i > 1 && v[i-1][j] == 1 && val+1 < ro[i-1][j])
            pr(i-1, j, val+1);

      if(j < m && v[i][j+1] == 1 && val+1 < ro[i][j+1])
            pr(i, j+1, val+1);

      if(j > 1 && v[i][j-1] == 1 && val+1 < ro[i][j-1])
            pr(i, j-1, val+1);




      if(i < n && j < m && v[i+1][j+1] == 1 && val+1 < ro[i+1][j+1])
            pr(i+1, j+1, val+1);

      if(i < n && j > 1 && v[i+1][j-1] == 1 && val+1 < ro[i+1][j-1])
            pr(i+1, j-1, val+1);

      if(i > 1 && j < m && v[i-1][j+1] == 1 && val+1 < ro[i-1][j+1])
            pr(i-1, j+1, val+1);

      if(i > 1 && j > 1 && v[i-1][j-1] == 1 && val+1 < ro[i-1][j-1])
            pr(i-1, j-1, val+1);
}

void pj(int i, int j, int val){
      ju[i][j]=val;

      if(i < n && v[i+1][j] == 1 && val+1 < ju[i+1][j])
            pr(i+1, j, val+1);

      if(i > 1 && v[i-1][j] == 1 && val+1 < ju[i-1][j])
            pr(i-1, j, val+1);

      if(j < m && v[i][j+1] == 1 && val+1 < ju[i][j+1])
            pr(i, j+1, val+1);

      if(j > 1 && v[i][j-1] == 1 && val+1 < ju[i][j-1])
            pr(i, j-1, val+1);




      if(i < n && j < m && v[i+1][j+1] == 1 && val+1 < ju[i+1][j+1])
            pr(i+1, j+1, val+1);

      if(i < n && j > 1 && v[i+1][j-1] == 1 && val+1 < ju[i+1][j-1])
            pr(i+1, j-1, val+1);

      if(i > 1 && j < m && v[i-1][j+1] == 1 && val+1 < ju[i-1][j+1])
            pr(i-1, j+1, val+1);

      if(i > 1 && j > 1 && v[i-1][j-1] == 1 && val+1 < ju[i-1][j-1])
            pr(i-1, j-1, val+1);
}

int main (){

      fin>>n>>m;
      fin.get();

      for(int i=0; i<n; i++){

            char s[105];
            fin.get(s, 105);

            for(int j=0; s[j] != 0; j++){
                  if(s[j] == ' ')
                        v[i+1][j+1]=1;
                  else if(s[j] == 'X')
                        v[i+1][j+1]=4;
                  else if(s[j] == 'R')
                        v[i+1][j+1]=2;
                  else if(s[j] == 'J')
                        v[i+1][j+1]=3;

                  ro[i+1][j+1]=MAXN;
                  ju[i+1][j+1]=MAXN;
            }
            fin.get();
      }

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

      for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++){

                  if(v[i][j] == 2)
                        pr(i, j, 1);

                  if(v[i][j] == 3)
                        pj(i, j, 1);

            }


      minn=MAXN;
      for(int i=1; i<=n; i++)
            for(int j=1; j<=m; j++)
                  if(ro[i][j] != MAXN && ju[i][j] != MAXN && ro[i][j] == ju[i][j]){
                        if(ro[i][j] < minn){
                              minn=ro[i][j];
                              ii=i;
                              jj=j;
                        }else if(ro[i][j] == minn && j < jj){
                              minn=ro[i][j];
                              ii=i;
                              jj=j;
                        }
                  }


      fout<<minn<<" "<<ii<<" "<<jj;

      return 0;
}