Pagini recente » Cod sursa (job #493980) | Cod sursa (job #1030089) | Cod sursa (job #1325736) | Cod sursa (job #124412) | Cod sursa (job #1782419)
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int dl[]={-1,0,1,0,-1,-1,1,1};
int dc[]={0,1,0,-1,-1,1,1,-1};
int i,j,l1,l2,c1,c2,lv,cv,l,c,n,m,p,u,a[102][102],b[102][102],minim,x,y;
struct coada
{
int l;
int c;
};
char cr[102];
coada que[10004];
int main()
{ fin>>n;
fin>>m;
fin.get();
for(i=1;i<=n;i++)
{
fin.getline(cr,102);
for(j=0;j<m;j++)
{
if(cr[j]=='X')
a[i][j+1]=b[i][j+1]=-1;
if(cr[j]=='R')
{
l1=i;
c1=j+1;
}
if(cr[j]=='J')
{
l2=i;
c2=j+1;
}
}
}
for(i=0;i<=n+1;i++)
a[i][0]=a[i][m+1]=-1;
for(j=0;j<=m+1;j++)
a[0][j]=a[n+1][j]=-1;
for(i=0;i<=n+1;i++)
b[i][0]=b[i][m+1]=-1;
for(j=0;j<=m+1;j++)
b[0][j]=b[n+1][j]=-1;
a[l1][c1]=1;
que[1].l=l1;
que[1].c=c1;
p=u=1;
while(p<=u)
{
l=que[p].l;
c=que[p].c;
p++;
//8 vecini pt l,c
for(i=0;i<=7;i++)
{
lv=l+dl[i];
cv=c+dc[i];
if(a[lv][cv]==0)
{
a[lv][cv]=a[l][c]+1;
u++;
que[u].l=lv;
que[u].c=cv;
}
}
}
b[l2][c2]=1;
que[1].l=l2;
que[1].c=c2;
p=u=1;
while(p<=u)
{
l=que[p].l;
c=que[p].c;
p++;
//4 vecini pt l,c
for(i=0;i<=7;i++)
{
lv=l+dl[i];
cv=c+dc[i];
if(b[lv][cv]==0)
{
b[lv][cv]=b[l][c]+1;
u++;
que[u].l=lv;
que[u].c=cv;
}
}
}
minim=100002;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(a[i][j]>0 && a[i][j]==b[i][j]&& minim>a[i][j])
{
minim=a[i][j];
x=i;
y=j;
}
}
}
fout<<minim<<" "<<x<<" "<<y;
return 0;
}