Pagini recente » Cod sursa (job #1834677) | Cod sursa (job #2380181) | Cod sursa (job #1280318) | Cod sursa (job #2218398) | Cod sursa (job #1539988)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
int q[2][100001],Min=100000,h[102][102],r[102][102],a[102][102],OK,cj,lj,cr,lr,j,n,m,i,l,c,ch,sol1,sol2;
int x,y,p,u,dx[]= {-1,-1,0,1,1,1,0,-1},dy[]= {0,1,1,1,0,-1,-1,-1};
int main()
{
fin>>n>>m;
for(i=0; i<=n+1; i++)
{
a[i][0]=-1;
a[i][m+1]=-1;
}
for (j=0; j<=m+1; j++)
{
a[0][j]=-1;
a[n+1][j]=-1;
}
int ok=1;
for(i=1; i<=n; i++)
{
if(ok==1)
{
fin.get();
}
ok=1;
for(j=1; j<=m; j++)
{
ch=fin.get();
if (ch=='X')
a[i][j]=-1;
else if (ch==' ')
a[i][j]=0;
else if (ch=='R')
{
lr=i;
cr=j;
r[i][j]=1;
}
else if (ch=='J')
{
lj=i;
cj=j;
h[i][j]=1;
}
else if(ch=='\n'&&j<=m)
{
ok=0;
break;
}
}
}
OK=1;
p=u=1;
q[0][p]=lr;
q[1][p]=cr;
while(p<=u)
{
x=q[0][p];
y=q[1][p];
for(int i=0; i<8; i++)
{
int l=x+dx[i];
int c=y+dy[i];
if (a[l][c]==0&&r[l][c]==0&&OK==1)
{
q[0][++u]=l;
q[1][u]=c;
r[l][c]=r[x][y]+1;
}
else if (a[l][c]==0&&h[l][c]==0&&OK==2)
{
q[0][++u]=l;
q[1][u]=c;
h[l][c]=h[x][y]+1;
}
}
p++;
}
OK=2;
p=u=1;
q[0][p]=lj;
q[1][p]=cj;
while(p<=u)
{
x=q[0][p];
y=q[1][p];
for(int i=0; i<8; i++)
{
int l=x+dx[i];
int c=y+dy[i];
if (a[l][c]==0&&r[l][c]==0&&OK==1)
{
q[0][++u]=l;
q[1][u]=c;
r[l][c]=r[x][y]+1;
}
else if (a[l][c]==0&&h[l][c]==0&&OK==2)
{
q[0][++u]=l;
q[1][u]=c;
h[l][c]=h[x][y]+1;
}
}
p++;
}
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
{
if(r[i][j]==h[i][j]&&r[i][j]!=0)
{
if(Min>r[i][j])
{
Min=r[i][j];
sol1=i;
sol2=j;
}
}
}
fout<<Min<<" "<<sol1<<" "<<sol2;
return 0;
}