Pagini recente » Cod sursa (job #475869) | Cod sursa (job #1467946) | Cod sursa (job #3038960) | Cod sursa (job #2978725) | Cod sursa (job #2653598)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
const int MAXN = 115;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
queue<pair<int, int> > q;
int n, m;
int a[MAXN][MAXN];
int b[MAXN][MAXN];
int r1, r2, j1, j2;
int dx[] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dy[] = {-1, 0, 1, 1, 1, 0, -1, -1};
void lee(int start1, int start2, int m[][])
{
q.push({start1, start2});
while(!q.empty())
{
int x = q.front().first, y = q.front().second;
q.pop();
for(int i = 0; i < 8; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if(m[nx][ny] == 0)
{
m[nx][ny] = m[x][y] + 1;
q.push({nx, ny});
}
}
}
}
int main()
{
char s[MAXN];
fin >> n >> m;
fin.get();
for(int i = 0; i <= n+1; i++)
a[i][0] = a[i][m+1] = b[i][m+1] = b[i][0] = -1;
for(int i = 0; i <= m+1; i++)
a[0][i] = a[n+1][i] = b[0][i] = b[n+1][i] = -1;
for(int i = 1; i <= n; i++){
fin.getline(s+1, 200, '\n');
for(int j = 1; j <= m; j++){
if(s[j] == 'R')
{
r1 = i;
r2 = j;
a[i][j] = 1;
}
else if(s[j] == 'J')
{
j1 = i;
j2 = j;
b[i][j] = 1;
}
else if(s[j] == 'X')
a[i][j] = b[i][j] = -1;
}
}
lee(r1, r2, a);
lee(j1, j2, b);
int resx, resy, mn = INT_MAX;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(a[i][j] < mn)
{
if(a[i][j] == b[i][j])
{
mn = a[i][j];
resx = i;
resy = j;
}
}
}
}
fout << mn << " " << res << " " << resy;
return 0;
}