Cod sursa(job #860653)
#include<fstream>
using namespace std;
int a[101][101],i,j,q[3][20001],u,p,l[101][101],max,k=0,sir[3][100000],c,d,n,m;
ofstream g("rj.out");
void init()
{
ifstream f("rj.in");
f>>n>>m;
char c;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{f>>c;
if(c==' ')
{a[i][j]=1;
l[i][j]=-1;
}
else if(c=='R' || c=='J')
{
a[i][j]=10;
k++;
sir[1][k]=i;
sir[2][k]=j;}
else l[i][j]=-2;}
f.close();
}
void intr(int c, int d)
{
u=u+1;
if(u>20000)
u=1;
q[1][u]=c;
q[2][u]=d;
}
void extr(int &c, int &d)
{
p=p+1;
if(p>20000)
p=1;
c=q[1][p];
d=q[2][p];
}
void lee(int x, int y)
{
p=0;u=0;
intr(x,y);
while(p!=u)
{extr(x,y);
if(x>1)
if(a[x-1][y]==1)
if(l[x-1][y]<l[x][y]+1)
{ l[x-1][y]=l[x][y]+1;
intr(x-1,y);
}
if(x<n)
if(a[x+1][y]==1)
if(l[x+1][y]<l[x][y]+1)
{l[x+1][y]=l[x][y]|+1;
intr(x+1,y);
}
if(y>1)
if(a[x][y-1]==1)
if(l[x][y-1]<l[x][y]+1)
{ l[x][y-1]=l[x][y]+1;
intr(x,y-1);
}
if(y<n)
if(a[x][y+1]==1)
if(l[x][y+1]<l[x][y]+1)
{ l[x][y+1]=l[x][y]+1;
intr(x,y+1);
}
}
}
void scriere()
{int max,i_max,j_max;
max=-1;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(l[i][j]>max)
{max=l[i][j];
i_max=i;
j_max=j;
}
g<<max;
}
int main()
{
init();
for(i=1;i<=k;i++)
lee(sir[1][i],sir[2][i]);
scriere();
return 0;}