Pagini recente » Cod sursa (job #3142790) | Cod sursa (job #872215) | Cod sursa (job #1458833) | Cod sursa (job #1513157) | Cod sursa (job #2661389)
#include <iostream>
#include <fstream>
#include <queue>
#include <string>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int move_line[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
int move_col[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
int start_x[2], start_y[2];
int a[105][105][2], visited[105][105][2];
queue<pair<int, int>> q[2];
int n, m;
bool valid(int i, int j, int q_val){
if(0 <= i && i < n && 0 <= j && j < m && visited[i][j][q_val] == 0)
return 1;
return 0;
}
int repl(char c, int i, int j){
if(c == ' '){
return 0;
}
else if(c == 'X'){
visited[i][j][0] = -1;
visited[i][j][1] = -1;
return 1;
}
else if(c == 'R'){
visited[i][j][0] = 1;
start_x[0] = i;
start_y[0] = j;
return 2;
}
else if(c == 'J'){
visited[i][j][1] = 1;
start_x[1] = i;
start_y[1] = j;
return 3;
}
}
void lee(int q_val){
while (q[q_val].size() > 0){
for(int u = 0; u < 8; u++){
if (valid(q[q_val].front().first + move_line[u], q[q_val].front().second + move_col[u], q_val)){
q[q_val].push(make_pair(q[q_val].front().first + move_line[u], q[q_val].front().second + move_col[u]));
visited[q[q_val].front().first + move_line[u]][q[q_val].front().second + move_col[u]][q_val] = 1;
a[q[q_val].front().first + move_line[u]][q[q_val].front().second + move_col[u]][q_val] += a[q[q_val].front().first][q[q_val].front().second][q_val] + 1;
}
}
q[q_val].pop();
}
}
int main(){
f >> n >> m;
char c;
string line;
int i, j;
i = -1;
j = 0;
while(getline(f, line, '\n')){
j = 0;
for(int k = 0; k < line.size(); k++){
c = line[k];
if(c == 'X'){
visited[i][j][0] = -1;
visited[i][j][1] = -1;
}
else if(c == 'R'){
visited[i][j][0] = 1;
start_x[0] = i;
start_y[0] = j;
}
else if(c == 'J'){
visited[i][j][1] = 1;
start_x[1] = i;
start_y[1] = j;
}
j += 1;
}
i += 1;
}
q[0].push(make_pair(start_x[0], start_y[0]));
q[1].push(make_pair(start_x[1], start_y[1]));
lee(0);
lee(1);
for(int i = 0; i < n; i++){
for(int j = 0; j < m; j++){
if(visited[i][j][0] == 1 && visited[i][j][1] == 1 && a[i][j][0] == a[i][j][1]){
g << a[i][j][0] + 1 << " " << i + 1 << " " << j + 1;
return 0;
}
}
}
return 0;
}