Cod sursa(job #2162279)

Utilizator Wh1plashOvidiu Taralesca Wh1plash Data 12 martie 2018 09:40:24
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.01 kb
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <queue>
#include <list>
using namespace std;
string s;
int n, m, k;
queue <pair<int,int> > Q;
int a[101][101], spread[101][101];
vector<pair<int,int> > v;
int dx[8] = {0,1,1,1,0,-1,-1,-1};
int dy[8] = {-1,-1,0,1,1,1,0,-1};
ifstream in("rj.in");
ifstream out("rj.out")
void find_closest(){
  while(!Q.empty()){
    pair<int,int> K = Q.front();
    for(int i=0;i<8;i++){
      if(spread[K.first+dx[i]][K.second+dy[i]]>0 && spread[K.first+dx[i]][K.second+dy[i]] != spread[K.first][K.second]){
      /*  for(int i=1;i<=n;i++){
          for(int j=1;j<=m;j++)
            cout << spread[i][j] << ' ';
          cout << endl;
        } */
        out << a[K.first+dx[i]][K.second+dy[i]] << ' ' << K.first+dx[i] << ' ' << K.second+dy[i] << '\n';
        return;
      }
      if(a[K.first+dx[i]][K.second+dy[i]]==0 || a[K.first+dx[i]][K.second+dy[i]] > a[K.first][K.second]){
        a[K.first+dx[i]][K.second+dy[i]] = a[K.first][K.second] + 1;
        spread[K.first+dx[i]][K.second+dy[i]] = spread[K.first][K.second];
        Q.push(make_pair(K.first+dx[i],K.second+dy[i]));
      }
    }
    Q.pop();
  }
}
int main(){
  int y, k=1;
  char x;
  in >> n >> m;
  getline(in,s);
  //in.get();
  for(int i=1;i<=n;i++){
    getline(in, s);
    int j;
    for(j=1;j<=s.size();j++){
      if(s[j-1] == 'R' || s[j-1] == 'J'){
        Q.push(make_pair(i,j));
        v.push_back(make_pair(i,j));
        spread[i][j] = k;
        k++;
        a[i][j]=0;
      }
      else if( s[j-1] == 'X')
        a[i][j] = -1;
      else a[i][j] = 0;
    }
    for(;j<=m;j++)
      a[i][j]=0;
  }
  for(int i=0;i<=n+1;i++)
    a[0][i] = a[n+1][i] = -1;
  for(int i=0;i<=m+1;i++)
    a[i][0] = a[i][m+1] = -1;


  find_closest();
/*
  for(int i=1;i<=n;i++){
    for(int j=1;j<=m;j++)
      cout << spread[i][j] << ' ';
    cout << endl;
  }
  */
  /*while(in >> x >> y){
    cout << a[x][y] << '[' << v[spread[x][y]-1].first << ", " << v[spread[x][y]-1].second<< ']' << endl;
  }*/

  return 0;
}