Pagini recente » Cod sursa (job #213421) | Cod sursa (job #706467) | Cod sursa (job #389540) | Cod sursa (job #2073122) | Cod sursa (job #1631043)
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
short N, M;
char c[101];
short i, j;
short xr, xj, yr, yj;
short tileMapr[102][102], tileMapj[102][102];
short ultim, prim;
short coada[2][10000];
short step;
int minim = 2000000;
short targetX, targetY;
int main()
{
fin>>N>>M;
fin.get();
for(i = 1; i <= N; i++)
{
fin.getline(c, 256);
for(j = 0; j < M; j++)
{
tileMapr[i][j + 1] = 1;
tileMapj[i][j + 1] = 1;
if(c[j] == 'X')
{
tileMapr[i][j + 1] = 0;
tileMapj[i][j + 1] = 0;
}
else if(c[j] == 'R')
{
yr = i;
xr = j + 1;
}
else if(c[j] == 'J')
{
yj = i;
xj = j + 1;
}
}
}
ultim = 0;
prim = 0;
coada[0][ultim] = yr;
coada[1][ultim++] = xr;
tileMapr[yr][xr] = 2;
while(ultim != prim)
{
step = tileMapr[coada[0][prim]][coada[1][prim]] + 1;
if(tileMapr[coada[0][prim] - 1][coada[1][prim]] == 1)
{
coada[0][ultim] = coada[0][prim] - 1;
coada[1][ultim] = coada[1][prim];
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapr[coada[0][prim] + 1][coada[1][prim]] == 1)
{
coada[0][ultim] = coada[0][prim] + 1;
coada[1][ultim] = coada[1][prim];
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapr[coada[0][prim]][coada[1][prim] - 1] == 1)
{
coada[0][ultim] = coada[0][prim];
coada[1][ultim] = coada[1][prim] - 1;
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapr[coada[0][prim]][coada[1][prim] + 1] == 1)
{
coada[0][ultim] = coada[0][prim];
coada[1][ultim] = coada[1][prim] + 1;
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapr[coada[0][prim] - 1][coada[1][prim] - 1] == 1)
{
coada[0][ultim] = coada[0][prim] - 1;
coada[1][ultim] = coada[1][prim] - 1;
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapr[coada[0][prim] - 1][coada[1][prim] + 1] == 1)
{
coada[0][ultim] = coada[0][prim] - 1;
coada[1][ultim] = coada[1][prim] + 1;
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapr[coada[0][prim] + 1][coada[1][prim] - 1] == 1)
{
coada[0][ultim] = coada[0][prim] + 1;
coada[1][ultim] = coada[1][prim] - 1;
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapr[coada[0][prim] + 1][coada[1][prim] + 1] == 1)
{
coada[0][ultim] = coada[0][prim] + 1;
coada[1][ultim] = coada[1][prim] + 1;
tileMapr[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
prim++;
}
ultim = 0;
prim = 0;
coada[0][ultim] = yj;
coada[1][ultim++] = xj;
tileMapj[yj][xj] = 2;
while(ultim != prim)
{
step = tileMapj[coada[0][prim]][coada[1][prim]] + 1;
if(tileMapj[coada[0][prim] - 1][coada[1][prim]] == 1)
{
coada[0][ultim] = coada[0][prim] - 1;
coada[1][ultim] = coada[1][prim];
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapj[coada[0][prim] + 1][coada[1][prim]] == 1)
{
coada[0][ultim] = coada[0][prim] + 1;
coada[1][ultim] = coada[1][prim];
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapj[coada[0][prim]][coada[1][prim] - 1] == 1)
{
coada[0][ultim] = coada[0][prim];
coada[1][ultim] = coada[1][prim] - 1;
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapj[coada[0][prim]][coada[1][prim] + 1] == 1)
{
coada[0][ultim] = coada[0][prim];
coada[1][ultim] = coada[1][prim] + 1;
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapj[coada[0][prim] - 1][coada[1][prim] - 1] == 1)
{
coada[0][ultim] = coada[0][prim] - 1;
coada[1][ultim] = coada[1][prim] - 1;
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapj[coada[0][prim] - 1][coada[1][prim] + 1] == 1)
{
coada[0][ultim] = coada[0][prim] - 1;
coada[1][ultim] = coada[1][prim] + 1;
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapj[coada[0][prim] + 1][coada[1][prim] - 1] == 1)
{
coada[0][ultim] = coada[0][prim] + 1;
coada[1][ultim] = coada[1][prim] - 1;
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
if(tileMapj[coada[0][prim] + 1][coada[1][prim] + 1] == 1)
{
coada[0][ultim] = coada[0][prim] + 1;
coada[1][ultim] = coada[1][prim] + 1;
tileMapj[coada[0][ultim]][coada[1][ultim]] = step;
ultim++;
}
prim++;
}
for(i = 1; i <= N; i++)
{
for(j = 1; j <= M; j++)
{
if(tileMapr[i][j] > 1)
{
if(tileMapr[i][j] == tileMapj[i][j])
{
if(tileMapr[i][j] < minim)
{
minim = tileMapr[i][j] - 1;
targetY = i;
targetX = j;
}
}
}
}
}
fout<<minim<<" "<<targetY<<" "<<targetX;
return 0;
}