Pagini recente » Cod sursa (job #1312168) | Cod sursa (job #1684020) | Cod sursa (job #1719367) | Cod sursa (job #1096914) | Cod sursa (job #1292634)
#include <fstream>
#define NMax 102
#define Nd 8
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n, m, xr, yr, xj, yj;
int dx[]={1,1,1,0,0,-1,-1,-1},dy[]={-1,0,1,-1,1,-1,0,1};
char viz[NMax][NMax];
int r[NMax][NMax];
int j[NMax][NMax];
void citire(void);
void afisare(int [NMax][NMax]);
void parcurge (int, int, int[NMax][NMax]);
int main()
{
citire();
parcurge(xr, yr, r);
parcurge(xj, yj, j);
afisare(j);
}
void citire(void)
{
int i, k;
char c;
f>>n>>m;
for (i=0; i<=n+1; i++) viz[i][0]=viz[i][m+1]='X';//bord
for (i=0; i<=m+1; i++) viz[0][i]=viz[n+1][i]='X';//bord
f.get(c);
for (i=1; i<=n; i++)
{for (k=1; k<=m; k++)
{f.get(c); viz[i][k]=c;
if (c=='R') {xr=i; yr=k; }
else if (c=='J') {xj=i; yj=k; }
}
f.get(c);}
}
void parcurge (int x0, int y0, int d[NMax][NMax])
{
int C[NMax*NMax], p;
int inc=0, sf=0, i, k;
for (i=0; i<=n+1; i++)
for (k=0; k<=m+1; k++) d[i][k]=-1;//nu am fost
int t=x0*1000+y0;
d[x0][y0]=1;
C[0]=t;
while (inc<=sf)
{
p=C[inc++];
int x=p/1000;
int y=p%1000;
for (i=0; i<Nd; i++)
if (viz[x+dx[i]][y+dy[i]]==' ' && d[x+dx[i]][y+dy[i]]==-1)
{
d[x+dx[i]][y+dy[i]]=1+d[x][y];
t=(x+dx[i])*1000+y+dy[i];
C[++sf]=t;
}
}
}
void afisare(int j[NMax][NMax])
{
int tmin=NMax*NMax+1, xmin=-1, ymin=-1, i, k;
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<<'\n';
g.close();
}