Pagini recente » Cod sursa (job #407680) | pregatire_oni_liceu | Cod sursa (job #2008636) | Cod sursa (job #1167598) | Cod sursa (job #2496076)
#include <fstream>
using namespace std;
struct ura
{
int l, c;
};
ifstream in ("rj.in");
ofstream out ("rj.out");
ura coada [10001];
int dirl[8] = {-1, 0, 1, 0, 1, 1, -1, -1};
int dirc[8] = {0, 1, 0, -1, 1, -1, 1, -1};
int a[101][101], b[101][101];
int main()
{
int inc = 1, sf = 1, n, m, i, j, lr, cr, lj, cj, lin, col, lin1, col1, minn = 10000;
char s;
in >> n >> m;
in.get(s);
for(i = 0; i <= n + 1; i++) {
a[i][0] = -1;
b[i][0] = -1;
a[i][m+1] = -1;
b[i][m+1] = -1;
}
for(j = 0; j <= m + 1; j++) {
a[0][j] = -1;
b[0][j] = -1;
a[n+1][j] = -1;
b[n+1][j] = -1;
}
for(i = 1; i <= n; i++)
{
for(j = 1; j <= m; j++)
{
in.get(s);
if(s == 'R')
{
a[i][j] = 1;
b[i][j] = 0;
lr = i;
cr = j;
}
else if(s == 'J')
{
a[i][j] = 0;
b[i][j] = 0;
lj = i;
cj = j;
}
else if(s == 'X')
{
a[i][j] = -1;
b[i][j] = -1;
}
else
{
a[i][j] = 0;
b[i][j] = 0;
}
}
in.get(s);
}
coada[1].l = lr;
coada[1].c = cr;
a[lr][cr] = 1;
while(inc <= sf) {
lin = coada[inc].l;
col = coada[inc].c;
for(i = 0; i < 8; i++) {
lin1 = lin + dirl[i];
col1 = col + dirc[i];
if(a[lin1][col1] == 0) {
sf++;
coada[sf].l = lin1;
coada[sf].c = col1;
a[lin1][col1] = a[lin][col] + 1;
}
}
inc++;
}
sf = inc = 1;
coada[1].l = lj;
coada[1].c = cj;
b[lj][cj] = 1;
while(inc <= sf) {
lin = coada[inc].l;
col = coada[inc].c;
for(i = 0; i < 8; i++) {
lin1 = lin+dirl[i];
col1 = col + dirc[i];
if(b[lin1][col1] == 0) {
sf++;
coada[sf].l = lin1;
coada[sf].c = col1;
b[lin1][col1] = b[lin][col] + 1;
}
}
inc++;
}
int i1, j1;
for(i = 1; i <= n; i++)
for(j = 1; j <= m; j++) {
if(a[i][j] == b[i][j] && a[i][j] > 0 && a[i][j] < minn) {
minn = a[i][j];
i1 = i;
j1 = j;
}
}
out << minn << " " << i1 << " " << j1;
return 0;
}