Pagini recente » Cod sursa (job #595904) | Cod sursa (job #842841) | Cod sursa (job #2162818) | Cod sursa (job #2890257) | Cod sursa (job #2779134)
#include <fstream>
#include <string>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <set>
#include <map>
#include <string.h>
#include <queue>
#include <stack>
#define INF 0x3f3f3f3f
#define MAXN 128
using namespace std;
#ifdef DEBUG
string name = "data";
#else
string name = "rj";
#endif
ifstream fin(name + ".in");
ofstream fout(name + ".out");
char a[MAXN][MAXN];
int n,m;
int rdist[MAXN][MAXN];
int jdist[MAXN][MAXN];
bool viz[MAXN][MAXN];
void bfs(int x, int y, int dist[MAXN][MAXN]) {
memset(viz, 0, sizeof(viz));
queue<pair<int, int>> q;
q.push({x,y});
viz[x][y] = true;
dist[x][y] = 0;
int dx[8] = {1,-1,0,0, 1, 1, -1, -1};
int dy[8] = {0,0,1,-1, 1, -1, 1, -1};
while (!q.empty()) {
auto node = q.front();
q.pop();
for (int k = 0; k < 8; ++k) {
int nx = node.first + dx[k];
int ny = node.second + dy[k];
if (nx >= 0 && nx < n && ny >= 0 && ny < m && !viz[nx][ny] && a[nx][ny] != 'X') {
viz[nx][ny] = true;
q.push({nx,ny});
dist[nx][ny] = dist[node.first][node.second] + 1;
}
}
}
}
int main() {
fin >> n >> m;
memset(rdist, 0x3f, sizeof(rdist));
memset(jdist, 0x3f, sizeof(jdist));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
char c = '\n';
while (c == '\n' && !fin.eof()) {
fin.get(c);
}
a[i][j] = c;
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (a[i][j] == 'R') {
bfs(i, j, rdist);
}
if (a[i][j] == 'J') {
bfs(i, j, jdist);
}
}
}
int best = INF;
int x,y;
int nbest = INF;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
if (rdist[i][j] == jdist[i][j]) {
nbest = rdist[i][j];
}
if (nbest < best) {
best = nbest;
x = i;
y = j;
}
}
}
fout << best + 1 << " " << x + 1 << " " << y + 1;
return 0;
}