Pagini recente » Cod sursa (job #1011277) | Cod sursa (job #1208250) | Cod sursa (job #1843235) | Cod sursa (job #1207351) | Cod sursa (job #1605930)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,ir,jr,ij,jj;
int a[105][105],inainte[100005];
char s[105];
struct {int i,j;}c[100005];
void citire()
{ int i,j;
f.getline(s,105);
for(i=1;i<=m;i++)
{
f.getline(s,105);
for(j=0;j<n;j++)
if(s[j]=='X') a[i][j+1]=-1;
else if(s[j]=='R') ir=i,jr=j+1;
else if(s[j]=='J') ij=i,jj=j+1;
}
for(i=0;i<=m+1;i++) a[0][i]=a[i][m+1]=-1;
for(i=0;i<=n+1;i++) a[i][0]=a[n+1][i]=-1;
}
void lee()
{
int p,u,di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1},k,inou,jnou,loc,i;
a[ir][jr]=1;
c[1].i=ir;c[1].j=jr;
p=u=1;
while(p<=u)
{ for(k=0;k<=7;k++)
{ inou=c[p].i+di[k];
jnou=c[p].j+dj[k];
if(inou==ij && jnou==jj && a[c[p].i][c[p].j]%2==0)
{
g<<a[c[p].i][c[p].j]/2+1<<' ';
loc=p;
for(i=1;i<a[c[p].i][c[p].j]/2;i++) loc=inainte[loc];
g<<c[loc].i<<' '<<c[loc].j<<'\n';
p=u+1;
return;
}
if(a[inou][jnou]==0)
{a[inou][jnou]=a[c[p].i][c[p].j]+1;
u++;
c[u].i=inou;c[u].j=jnou;
inainte[u]=p;
}
}
p++;
}
}
void drum() {}
int main()
{ f>>m>>n;
citire();
lee();
return 0;
}