Pagini recente » Cod sursa (job #2047755) | Cod sursa (job #1729020) | Cod sursa (job #1870938) | Cod sursa (job #2060135) | Cod sursa (job #2389388)
#include <cstdio>
#include <queue>
FILE* FIN=freopen("rj.in","r",stdin);
FILE* FOUT=freopen("rj.out","w",stdout);
using namespace std;
int n,m,a[112][112],a1[112][112],a2[112][112];
struct crd
{
int x,y;
}r,jr,d[4]={0,1,0,-1,1,0,-1,0};
queue <crd> q;
void dcd(char x,int i,int j)
{
if(x==' ')
{
a[i][j]=0;
return;
}
if(x=='X')
{
a[i][j]=-1;
return;
}
if(x=='R')
{
a[i][j]=0;
r.x=i;
r.y=j;
return;
}
a[i][j]=0;
jr.x=i;
jr.y=j;
}
void cit()
{
char x;
int i,j;
scanf("%d%d\n",&n,&m);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%c",&x);
dcd(x,i,j);
}
scanf("\n");
}
}
void bord()
{
int i;
for(i=0;i<=n+1;i++)
{
a[i][0]=-1;
a[i][n+1]=-1;
}
for(i=0;i<=m+1;i++)
{
a[0][i]=-1;
a[n+1][i]=-1;
}
}
void play1(crd p)
{
int i;
crd c,l;
q.push(p);
while(!q.empty())
{
c=q.front();
q.pop();
for(i=0;i<4;i++)
{
l.x=c.x+d[i].x;
l.y=c.y+d[i].y;
if(a[l.x][l.y]==0&&a1[l.x][l.y]==0)
{
a1[l.x][l.y]=a1[c.x][c.y]+1;
q.push(l);
}
}
}
a1[p.x][p.y]=0;
}
void play2(crd p)
{
int i;
crd c,l;
q.push(p);
while(!q.empty())
{
c=q.front();
q.pop();
for(i=0;i<4;i++)
{
l.x=c.x+d[i].x;
l.y=c.y+d[i].y;
if(a[l.x][l.y]==0&&a2[l.x][l.y]==0)
{
a2[l.x][l.y]=a2[c.x][c.y]+1;
q.push(l);
}
}
}
a2[p.x][p.y]=0;
}
void fnd()
{
int i,j,sol=11024;
crd s;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if((a1[i][j]==a2[i][j])&&(a1[i][j]<sol)&&a1[i][j])
{
sol=a1[i][j];
s.x=i;
s.y=j;
}
printf("%d %d %d",sol,s.x,s.y);
}
int main()
{
cit();
bord();
play1(r);
play2(jr);
fnd();
return 0;
}