Pagini recente » Cod sursa (job #759587) | Cod sursa (job #2786666) | Borderou de evaluare (job #2912574) | Cod sursa (job #765905) | Cod sursa (job #3161093)
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct lee
{
int i, j;
};
queue <lee> l;
struct oras
{
int r, j;
};
oras v[102][102];
int i, j, n, m, iR, jR, jJ, jj, iJ, d, ii, pmin, afj, afi;
int dj[8] = { 0 ,0 ,1 ,1 ,-1,-1, 1,-1 };
int di[8] = { -1,1 ,-1, 1,-1, 1, 0, 0 };
char x[102];
int main()
{
cin >> n >> m;
cin.get();
for (i = 1; i <= n; i++)
{
cin.getline(x, 102);
for (j = 0; j < m; j++)
{
//cout <<'(' << x[j] << ')';
if (x[j] == 'X')
{
v[i][j].j = 0;
v[i][j].r = 0;
}
else if (x[j] == 'R')
{
v[i][j].r = 1;
iR = i;
jR = j;
}
else if (x[j] == 'J')
{
v[i][j].j = 1;
iJ = i;
jJ = j;
}
else
{
v[i][j].r = -1;
v[i][j].j = -1;
}
}
}
l.push({ iR,jR });
while (!l.empty())
{
i = l.front().i;
j = l.front().j;
for (d = 0; d < 8; d++)
{
ii = i + di[d];
jj = j + dj[d];
if (v[ii][jj].r == -1)
{
v[ii][jj].r = v[i][j].r + 1;
l.push({ ii,jj });
}
}
l.pop();
}
l.push({ iJ,jJ });
while (!l.empty())
{
i = l.front().i;
j = l.front().j;
for (d = 0; d < 8; d++)
{
ii = i + di[d];
jj = j + dj[d];
if (v[ii][jj].j == -1)
{
v[ii][jj].j = v[i][j].j + 1;
l.push({ ii,jj });
}
}
l.pop();
}
pmin = 1000000000;
for (i = 1; i <= n; i++)
for (j = 0; j < m; j++)
if (v[i][j].r == v[i][j].j && v[i][j].r < pmin && v[i][j].r >= 1)
{
pmin = v[i][j].r;
afi = i;
afj = j + 1;
}
cout << pmin << ' ' << afi << ' ' << afj << endl;
/* for (i = 1; i <= n; i++)
{
for (j = 0; j < m; j++)
cout << v[i][j].r << ' ';
cout << endl;
}
for (i = 1; i <= n; i++)
{
for (j = 0; j < m; j++)
cout << v[i][j].j << ' ';
cout << endl;
}*/
return 0;
}