Pagini recente » Cod sursa (job #2041481) | Cod sursa (job #550695) | Cod sursa (job #1793605) | Cod sursa (job #959017) | Cod sursa (job #2151999)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct str
{
int a, b;
};
int a[101][101], mp[101][101], n, m, i, j, x, xx, y, yy;
int di[] = {-1, -1, 0, 1, 1, 1, 0, -1};
int dj[] = {0, 1, 1, 1, 0, -1, -1, -1};
queue <str> Q;
void leer()
{
int inx, jnx, d;
Q.push({x, y});
while(!Q.empty())
{
i = Q.front().a;
j = Q.front().b;
Q.pop();
for(d = 0; d < 8; ++d)
{
inx = i + di[d];
jnx = j + dj[d];
if(a[inx][jnx] != -1 && a[inx][jnx] < 1)
{
a[inx][jnx] = a[i][j] + 1;
Q.push({inx, jnx});
}
}
}
}
int leej()
{
int inx, jnx, d;
Q.push({xx, yy});
while(!Q.empty())
{
i = Q.front().a;
j = Q.front().b;
Q.pop();
for(d = 0; d < 8; ++d)
{
inx = i + di[d];
jnx = j + dj[d];
if(mp[inx][jnx] != -1 && mp[inx][jnx] < 1)
{
mp[inx][jnx] = mp[i][j] + 1;
if(a[inx][jnx] == mp[inx][jnx])
{
g<<mp[inx][jnx]<< ' ' << inx << ' ' << jnx;
return 0;
}
Q.push({inx, jnx});
}
}
}
return 0;
}
void bordare()
{
for(i = 0; i <= n+1; ++i)
a[i][0] = a[i][m+1] = mp[i][0] = mp[i][m+1] = -1;
for(j = 1; j <= m; ++j)
a[0][j] = a[n+1][j] = mp[0][j] = mp[n+1][j] = -1;
}
void citire()
{
char c[101];
f>>n>>m;
f.get();
for(i = 1; i <= n; ++i)
{
f.getline(c, m+1);
for(j = 0; j < m; ++j)
{
if(c[j] == 'X')
a[i][j+1] = mp[i][j+1] = -1;
else if(c[j] == 'R')
{
a[i][j+1] = 1;
x = i;
y = j+1;
}
else if(c[j] == 'J')
{
mp[i][j+1] = 1;
xx = i;
yy = j+1;
}
}
}
}
int main()
{
citire();
bordare();
leer();
leej();
return 0;
}