Pagini recente » Cod sursa (job #3132372) | Cod sursa (job #2502495) | Cod sursa (job #2297199) | Cod sursa (job #303986) | Cod sursa (job #855314)
Cod sursa(job #855314)
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct cuplu {
int a, b;
};
int i, j, m, n, mini = 120, f, g;
queue<cuplu> coada;
string a; cuplu xy, v[100][100];
void r(int x, int y) {
coada.pop();
if((v[x][y + 1].a == 0) && (y < m - 1)) {
xy.a = x;
xy.b = y + 1;
v[x][y + 1].a = v[x][y].a + 1;
coada.push(xy);
}
if((v[x + 1][y + 1].a == 0) && (y < m - 1) && (x < n - 1)) {
xy.a = x + 1;
xy.b = y + 1;
v[x + 1][y + 1].a = v[x][y].a + 1;
coada.push(xy);
}
if((v[x + 1][y].a == 0) && (x < n - 1)) {
xy.a = x + 1;
xy.b = y;
v[x + 1][y].a = v[x][y].a + 1;
coada.push(xy);
}
if((v[x + 1][y - 1].a == 0) && (y > 0) && (x < n - 1)) {
xy.a = x + 1;
xy.b = y - 1;
v[x + 1][y - 1].a = v[x][y].a + 1;
coada.push(xy);
}
if((v[x][y - 1].a == 0) && (y > 0)) {
xy.a = x;
xy.b = y - 1;
v[x][y - 1].a = v[x][y].a + 1;
coada.push(xy);
}
if((v[x - 1][y - 1].a == 0) && (x > 0) && (y > 0)) {
xy.a = x - 1;
xy.b = y - 1;
v[x - 1][y - 1].a = v[x][y].a + 1;
coada.push(xy);
}
if((v[x - 1][y].a == 0) && (x > 0)) {
xy.a = x - 1;
xy.b = y;
v[x - 1][y].a = v[x][y].a + 1;
coada.push(xy);
}
if((v[x - 1][y + 1].a == 0) && (y < m - 1) && (x > 0)) {
xy.a = x - 1;
xy.b = y + 1;
v[x - 1][y + 1].a = v[x][y].a + 1;
coada.push(xy);
}
if(!coada.empty()) {
xy = coada.front();
r(xy.a, xy.b);
}
}
void ju(int x, int y) {
coada.pop();
if((v[x][y + 1].b == 0) && (y < m - 1)) {
xy.a = x;
xy.b = y + 1;
v[x][y + 1].b = v[x][y].b + 1;
coada.push(xy);
}
if((v[x + 1][y + 1].b == 0) && (y < m - 1) && (x < n - 1)) {
xy.a = x + 1;
xy.b = y + 1;
v[x + 1][y + 1].b = v[x][y].b + 1;
coada.push(xy);
}
if((v[x + 1][y].b == 0) && (x < n - 1)) {
xy.a = x + 1;
xy.b = y;
v[x + 1][y].b = v[x][y].b + 1;
coada.push(xy);
}
if((v[x + 1][y - 1].b == 0) && (y > 0) && (x < n - 1)) {
xy.a = x + 1;
xy.b = y - 1;
v[x + 1][y - 1].b = v[x][y].b + 1;
coada.push(xy);
}
if((v[x][y - 1].b == 0) && (y > 0)) {
xy.a = x;
xy.b = y - 1;
v[x][y - 1].b = v[x][y].b + 1;
coada.push(xy);
}
if((v[x - 1][y - 1].b == 0) && (x > 0) && (y > 0)) {
xy.a = x - 1;
xy.b = y - 1;
v[x - 1][y - 1].b = v[x][y].b + 1;
coada.push(xy);
}
if((v[x - 1][y].b == 0) && (x > 0)) {
xy.a = x - 1;
xy.b = y;
v[x - 1][y].b = v[x][y].b + 1;
coada.push(xy);
}
if((v[x - 1][y + 1].b == 0) && (y < m - 1) && (x > 0)) {
xy.a = x - 1;
xy.b = y + 1;
v[x - 1][y + 1].b = v[x][y].b + 1;
coada.push(xy);
}
if(!coada.empty()) {
xy = coada.front();
ju(xy.a, xy.b);
}
}
int main() {
fin >> n >> m;
getline(fin, a);
for(i = 0; i < m; i++) {
getline(fin, a);
for(j = 0; j < n; j++) {
if(a[j] == ' ') {
v[i][j].a = 0;
v[i][j].b = 0;
}
if(a[j] == 'X') {
v[i][j].a = -1;
v[i][j].b = -1;
}
if(a[j] == 'R') {
v[i][j].a = 1;
xy.a = i;
xy.b = j;
coada.push(xy);
}
if(a[j] == 'J') {
v[i][j].b = 1;
f = i;
g = j;
}
}
}
xy = coada.front();
r(xy.a, xy.b);
xy.a = f;
xy.b = g;
coada.push(xy);
ju(f, g);
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
if((v[j][i].a == v[j][i].b) && (v[j][i].a != -1) && (v[j][i].a != 0)) {
if(v[j][i].a < mini) {
mini = v[j][i].a;
}
}
}
}
for(i = 0; i < m; i++) {
for(j = 0; j < n; j++) {
cout << v[i][j].b << ' ';
}
cout << '\n';
}
fout << mini;
fin.close();
fout.close();
return 0;
}