Pagini recente » Cod sursa (job #2321101) | Cod sursa (job #1180576) | Cod sursa (job #524486) | Cod sursa (job #834998) | Cod sursa (job #1467392)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
char a[201];
int b[105][105];
int r[105][105];
int jl[105][105];
int dl[]={-1,-1,0,1,1,1,0,-1};
int dc[]={0,1,1,1,0,-1,-1,-1};
struct Poz
{
int lin,col;
};
int n,prim,ultim,m,xr,yr,xj,yj,pozx,pozy,t=9999999;
Poz Q[10005];
inline void Bordare(int b[105][105]){
for(int i=0;i<=n+1;i++)
{
b[i][0]=-1;
b[i][m+1]=-1;
}
for(int j=0;j<=m+1;j++)
{
b[0][j]=-1;
b[n+1][j]=-1;
}
}
inline void Citire()
{
f>>n>>m;
f.get();
for(int i=1;i<=n;i++)
{
f.getline(a, 200);
for(int j=0;j<m;j++)
{
if(a[j]=='X')
b[i][j+1]=-1;
if(a[j]=='R')
{
xr=i;
yr=j+1;
b[xr][yr]=0;
}
if(a[j]=='J')
{
xj=i;
yj=j+1;
b[xr][yr]=0;
}
}
}
}
inline void Lee_Romeo()
{
ultim=0;
prim=1;
Poz ps,p,v;
ps.lin=xr;
ps.col=yr;
Q[++ultim]=ps;
r[ps.lin][ps.col]=1;
while(prim<=ultim)
{
p=Q[prim];
prim++;
for(int i=0;i<8;i++)
{
v.lin=p.lin+dl[i];
v.col=p.col+dc[i];
if(r[v.lin][v.col]==0 && b[v.lin][v.col]!=-1)
{
ultim++;
Q[ultim]=v;
r[v.lin][v.col]=r[p.lin][p.col]+1;
}
}
}
}
inline void Lee_Julieta()
{
ultim=0;
prim=1;
Poz ps,p,v;
ps.lin=xj;
ps.col=yj;
Q[++ultim]=ps;
jl[ps.lin][ps.col]=1;
while(prim<=ultim)
{
p=Q[prim];
prim++;
for(int i=0;i<8;i++)
{
v.lin=p.lin+dl[i];
v.col=p.col+dc[i];
if(jl[v.lin][v.col]==0 && b[v.lin][v.col]!=-1)
{
ultim++;
Q[ultim]=v;
jl[v.lin][v.col]=jl[p.lin][p.col]+1;
}
}
}
}
inline void Rezolva(){
t=99999;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(r[i][j]==jl[i][j] && t>=r[i][j] && b[i][j]!=-1 && r[i][j]!=0)
{
t=r[i][j];
pozx=i;
pozy=j;
//g<<r[i][j]<<"\n";
}
g<<t<<" "<<pozx<<" "<<pozy;
}
int main()
{
Citire();
Bordare(b);
Bordare(r);
Bordare(jl);
Lee_Romeo();
Lee_Julieta();
Rezolva();
/*for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
g<<jl[i][j]<<" ";
g<<"\n";
}*/
return 0;
}