Pagini recente » Cod sursa (job #710325) | Cod sursa (job #3223767) | Cod sursa (job #2274761) | Cod sursa (job #2736134) | Cod sursa (job #1851628)
#include <fstream>
#include <cstring>
#define MAX 105
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
struct cell
{
int x, y;
int autor;
};
int N, M;
int Sol, Soli, Solj;
int v[MAX][MAX];
int autori[MAX][MAX];
int indice;
int dx[] = {1, 0, -1, 0, 1, -1, -1, 1};
int dy[] = {0, 1, 0, -1, -1, 1, -1, 1};
cell coada[MAX * MAX];
void Read(){
char sir[200];
in >> N >> M;
in.get();
for(int i = 1; i <= N; ++i){
in.getline(sir, 200);
for(int j = 1; j <= M; ++j){
if(sir[j - 1] == 'X')
v[i][j] = -1;
else if(sir[j - 1] == 'R' || sir[j - 1] == 'J'){
v[i][j] = 1;
indice++;
coada[indice].x = i;
coada[indice].y = j;
if(sir[j - 1] == 'R')
autori[i][j] = 1;
else
autori[i][j] = 0;
}
}
}
}
void Lee(){
bool done = false;
for(int i = 1; i <= indice; ++i){
for(int k = 0; k < 8; ++k){
int newX = coada[i].x + dx[k];
int newY = coada[i].y + dy[k];
if(v[newX][newY] != -1 && newX > 0 && newX < N + 1 && newY > 0 && newY < M + 1){
if(v[newX][newY] == 0 && !done){
indice++;
v[newX][newY] = v[coada[i].x][coada[i].y] + 1;
coada[indice].x = newX;
coada[indice].y = newY;
autori[newX][newY] = autori[coada[i].x][coada[i].y];
}
else{
if(v[coada[i].x][coada[i].y] + 1 == v[newX][newY] && autori[coada[i].x][coada[i].y] != autori[newX][newY]){
v[newX][newY] = v[coada[i].x][coada[i].y] + 1;
autori[newX][newY] = autori[coada[i].x][coada[i].y];
Sol = v[newX][newY];
Soli = newX;
Solj = newY;
done = true;
}
}
}
}
}
}
void Print(){
out << Sol << " " << Soli << " " << Solj << "\n";
}
int main(){
Read();
Lee();
Print();
return 0;
}