Pagini recente » Cod sursa (job #1891075) | Cod sursa (job #404102) | Cod sursa (job #721462) | Cod sursa (job #475476) | Cod sursa (job #2663687)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m;
int rom[102][102];
int jul[102][102];
char linie[102];
int x1,y1, x2,y2;
int dl[8] = {0,-1,-1,-1,0,1,1,1};
int dc[8] = {-1,-1,0,1,1,1,0,-1};
void make_path(int a[][102], int lin, int col) {
pair<int,int> elem;
pair<int,int> v;
queue<pair<int,int>> coada;
coada.push(make_pair(lin, col));
while(!coada.empty()) {
elem = coada.front();
coada.pop();
for (int i=0; i<8; i++) {
v.first = elem.first + dl[i];
v.second = elem.second + dc[i];
if (a[v.first][v.second] == 0) {
coada.push(v);
a[v.first][v.second] = a[elem.first][elem.second] + 1;
}
}
}
}
int main() {
fin >> n >> m;
fin.get();
for (int i=0; i<=n+1; i++) {
rom[i][0] = jul[i][0] = -1;
rom[i][m+1] = jul[i][m+1] = -1;
}
for (int j=0; j<=m+1; j++) {
rom[0][j] = jul[0][j] = -1;
rom[n+1][j] = jul[n+1][j] = -1;
}
for (int i=1; i<=n; i++) {
fin.getline(linie,102);
for (int j=0; j<m; j++) {
if (linie[j] == 'X') {
rom[i][j+1] = jul[i][j+1] = -1;
}
else {
if (linie[j] == 'R') {
rom[i][j+1] = 1;
x1 = i;
y1 = j+1;
}
else {
if (linie[j] == 'J') {
jul[i][j+1] = 1;
x2 = i;
y2 = j+1;
}
}
}
}
}
make_path(rom,x1,y1);
make_path(jul,x2,y2);
int mini = 100005;
int pi, pj;
for(int i=1; i<=n; i++) {
for (int j=1; j<=m; j++) {
if (rom[i][j] == jul[i][j] && rom[i][j] > 0 && rom[i][j] < mini) {
mini = rom[i][j];
pi = i;
pj = j;
}
}
}
fout << mini << " " << pi << " " << pj;
return 0;
}