Pagini recente » Cod sursa (job #2317601) | Cod sursa (job #64763) | Cod sursa (job #3124822) | Cod sursa (job #636911) | Cod sursa (job #1904304)
#include <fstream>
#include <string>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
const short NMAX = 100;
const short nd = 4;
const short dx[nd] = {-1, 1, 0, 0};
const short dy[nd] = {0, 0, -1, 1};
short v[NMAX + 2][NMAX + 2];
short qx[NMAX * NMAX + 1], qy[NMAX * NMAX + 1];
int main()
{
short n, m;
fin >> n >> m;
string s;
getline(fin, s);
short startrx, startry, startjx, startjy;
for ( short i = 1; i <= n; ++ i ) {
getline(fin, s);
for ( short j = 0; j < short(s.size()); ++ j ) {
if ( s[j] == 'X' ) {
v[i][j+1] = NMAX*NMAX+1;
}
if (s[j] == 'R') {
v[i][j+1] = 1;
startrx = i;
startry = j + 1;
}
if (s[j] == 'J') {
v[i][j+1] = -1;
startjx = i;
startjy = j + 1;
}
}
}
for(short i = 0; i <= n + 1; i++)
{
v[0][i] = NMAX*NMAX + 1;
v[n + 1][i] = NMAX*NMAX + 1;
v[i][0] = NMAX*NMAX + 1;
v[i][n + 1] = NMAX*NMAX + 1;
}
qx[1] = startrx;
qy[1] = startry;
qx[2] = startjx;
qy[2] = startjy;
short qb = 1, qe = 2, tmin = NMAX + 1, stopx = NMAX, stopy = NMAX;
while(qb <= qe)
{
short x = qx[qb], y = qy[qb];
for(short i = 0; i < nd; i++)
{
short xn = x + dx[i], yn = y + dy[i];
if(v[xn][yn] == 0) {
if(v[x][y] < 0){
v[xn][yn] = v[x][y] - 1;
}
else if(v[x][y] > 0) {
v[xn][yn] = v[x][y] + 1;
}
++qe;
qx[qe] = xn;
qy[qe] = yn;
}
else if(v[xn][yn] != 0) {
if((v[x][y] > 0 && v[xn][yn] < 0) || (v[x][y] < 0 && v[xn][yn] > 0)) {
tmin = v[x][y];
if(tmin < 0) {
tmin = -tmin;
}
tmin--;
stopx = min(stopx, x);
stopy = min(stopy, y);
}
}
}
qb++;
}
fout << tmin << " " << stopx << " " << stopy;
return 0;
}