Pagini recente » Cod sursa (job #2982138) | Cod sursa (job #2925810) | Cod sursa (job #3164022) | Cod sursa (job #2778773) | Cod sursa (job #3261386)
#include<bits/stdc++.h>
using namespace std;
ifstream f("date.in");
ofstream g("date.out");
int R[101][101], J[101][101];
char c;
int n, m;
int ir, jr, ij, jj;
int di[] = { -1, -1, -1, 0 , 0 , 1, 1, 1 };
int dj[] = { -1, 0, 1, -1, 1, -1, 0, 1 };
struct rasp
{
int x, y, d = 25000;
}z;
int inmat(int i, int j)
{
return i >= 1 && j >= 1 && i <= n && j <= m;
}
void lee(int m[][101], int i, int j)
{
queue <pair<int, int>> q;
q.push({ i, j });
while (!q.empty())
{
int x = q.front().first;
int y = q.front().second;
q.pop();
for (int i = 0; i < 8; ++i)
{
int in = x + di[i];
int jn = y + dj[i];
if (inmat(in, jn))
if (m[in][jn] == 0 || m[in][jn] > m[x][y] + 1)
{
m[in][jn] = m[x][y] + 1;
q.push({ in, jn });
}
}
}
}
int main()
{
f >> n >> m;
f.ignore();
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
{
f.get(c);
if (c == 'X')
R[i][j] = J[i][j] = -1;
else if (c == 'R')
{
R[i][j] = 1;
ir = i;
jr = j;
}
else if (c == 'J')
{
J[i][j] = 1;
ij = i;
jj = j;
}
}
f.ignore();
}
lee(R, ir, jr);
lee(J, ij, jj);
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
if (R[i][j] == 0)
R[i][j] = -1;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
if (J[i][j] == 0)
J[i][j] = -1;
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
cout << R[i][j] << ' ';
cout << '\n';
}
cout << "-------------------"<<'\n';
for (int i = 1; i <= n; ++i)
{
for (int j = 1; j <= m; ++j)
cout << J[i][j] << ' ';
cout << '\n';
}
cout << "-------------------" << '\n';
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
if (R[i][j] == J[i][j] && z.d > R[i][j] && R[i][j] != -1)
z.d = R[i][j], z.x = i, z.y = j;
g << z.d << ' ' << z.x << ' ' << z.y;
}