Pagini recente » Cod sursa (job #2813518) | Cod sursa (job #2186496) | Cod sursa (job #510524) | Cod sursa (job #2758967) | Cod sursa (job #2716015)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct Vector2
{
int row;
int col;
};
queue <Vector2> v;
int mapR[105][105];
int mapJ[105][105];
int d[8][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}, {1, 1}, {-1, 1}, {1, -1}, {-1, -1}};
void Lee(int map[105][105], int n, int m, Vector2 start, Vector2 end)
{
while (!v.empty())
{
Vector2 pos = v.front();
int val = map[pos.row][pos.col];
for (int i = 0; i < 8; i++)
{
Vector2 newpos = {pos.row + d[i][0], pos.col + d[i][1]};
if (newpos.row > n || newpos.col > m || newpos.row < 1 || newpos.col < 1)
{
continue;
}
if (map[newpos.row][newpos.col] == 0)
{
map[newpos.row][newpos.col] = val + 1;
v.push(newpos);
}
}
v.pop();
}
}
Vector2 checkPos(int n, int m)
{
Vector2 pos;
int val = 10000;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (mapJ[i][j] == mapR[i][j] && mapJ[i][j] != -1 && mapJ[i][j] != 0)
{
if (mapJ[i][j] < val)
{
val = mapJ[i][j];
pos.row = i;
pos.col = j;
}
}
}
}
return pos;
}
int main()
{
int n, m;
fin >> n >> m;
Vector2 rm;
Vector2 jl;
fin.get();
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m + 1; j++)
{
char x;
x = fin.get();
if (x == '\n')
{
break;
}
if (x == 'X')
{
mapR[i][j] = -1;
mapJ[i][j] = -1;
}
if (x == 'R')
{
rm.row = i;
rm.col = j;
}
if (x == 'J')
{
jl.row = i;
jl.col = j;
}
}
}
v.push(rm);
mapR[rm.row][rm.col] = 1;
Lee(mapR, n, m, rm, jl);
cout << '\n';
v.push(jl);
mapJ[jl.row][jl.col] = 1;
Lee(mapJ, n, m, jl, rm);
Vector2 pos = checkPos(n, m);
fout << mapR[pos.row][pos.col] << ' ' << pos.row << ' ' << pos.col;
return 0;
}