Pagini recente » Cod sursa (job #3237079) | Cod sursa (job #659008) | Cod sursa (job #1755992) | Cod sursa (job #1903844) | Cod sursa (job #1247649)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int dl[] = {0, 1, 0, -1, -1, 1, -1, 1};
const int dc[] = {1, 0, -1, 0, -1, 1, 1,-1};
const int NMax = 102;
int n, m, xr, yr, xj, yj, i, k, tmin = NMax*NMax+5, xmin=-1, ymin=-1;
char l[NMax][NMax], c;
int r[NMax][NMax];
struct Pozitie {int l, c;};
Pozitie C[NMax*NMax], p;
void citire()
{
int i, k;
f >> n >> m;
for (i=0; i<=n+1; i++) l[i][0] = l[i][m+1]='X';
for (i=0; i<=m+1; i++) l[0][i] = l[n+1][i]='X';
f.get(c);
for (i=1; i<=n; i++)
{
for (k=1; k<=m; k++)
{
f.get(c);
l[i][k] = c;
if (l[i][k]=='R')
{
xr = i;
yr = k;
l[i][k] = ' ';
}
if (l[i][k]=='J')
{
xj = i;
yj = k;
l[i][k] = ' ';
}
}
f.get(c);
}
}
void prob(int x0, int y0, int d[NMax][NMax])
{
struct Pozitie {int l, c;} C[NMax*NMax], p;
int prim=0, ult=0, i, k;
for (i=0; i<=n+1; i++)
for (k=0; k<=m+1; k++) d[i][k] = -1;
C[0].l = x0;
C[0].c = y0;
d[x0][y0] = 1;
while (prim<=ult)
{
p=C[prim++];
for (i=0; i<8; ++i)
if (l[p.l+dl[i]][p.c+dc[i]]==' ' and d[p.l+dl[i]][p.c+dc[i]]==-1)
{
d[p.l+dl[i]][p.c+dc[i]] = 1+d[p.l][p.c];
C[++ult].l = p.l+dl[i];
C[ult].c = p.c+dc[i];
}
}
}
void scriere(int j[NMax][NMax])
{
for (i=1; i<=n; i++)
for (k=1; k<=m; k++)
if (r[i][k]==j[i][k])
if (r[i][k]<tmin && r[i][k]!=-1)
{
tmin = r[i][k];
xmin = i;
ymin = k;
}
g << tmin << ' ' << xmin << ' ' << ymin;
}
int main()
{
int j[NMax][NMax];
citire();
prob(xr, yr, r);
prob(xj, yj, j);
scriere(j);
}