Pagini recente » Cod sursa (job #2123684) | Diferente pentru implica-te/arhiva-educationala intre reviziile 223 si 176 | Cod sursa (job #1344091) | Cod sursa (job #1346812) | Cod sursa (job #908147)
Cod sursa(job #908147)
#include <fstream>
#include <cstring>
using namespace std;
ifstream is("rj.in");
ofstream os("rj.out");
const int di[]={-1,-1,-1,0,0,1,1,1};
const int dj[]={-1,0,1,-1,1,-1,0,1};
int n,m,a[101][101],b[101][101];
int inside(int i, int j)
{
return i>=1 && j>=1 && i<=n && j<=m;
}
int main()
{
int i,j,ir,jr,ij,jj,inou,jnou,pas;
char c[101];
is>>n>>m;
is.get();
for(i=1;i<=n;i++)
{
is.getline(c,101);
for(j=0;j<strlen(c);j++)
{
if(c[j]==' ') a[i][j+1]=0;
else if(c[j]=='X') a[i][j+1]=-1;
else if(c[j]=='R') {ir=i; jr=j+1; a[i][j+1]=0;}
else if(c[j]=='J') {ij=i; jj=j+1; a[i][j+1]=0;}
}
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++) b[i][j]=a[i][j];
a[ir][jr]=1;
pas=1;
do
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==pas)
for (int d=0;d<8;d++)
{
inou=i+di[d];
jnou=j+dj[d];
if(inside(inou,jnou))
if(a[inou][jnou]==0)
a[inou][jnou]=pas+1;
}
pas++;
}
while(a[ij][jj]==0);
b[ij][jj]=1;
pas=1;
do
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(b[i][j]==pas)
for (int d=0;d<8;d++)
{
inou=i+di[d];
jnou=j+dj[d];
if(inside(inou,jnou))
if(b[inou][jnou]==0)
b[inou][jnou]=pas+1;
}
pas++;
}
while(b[ir][jr]==0);
pas=(a[ij][jj]+1)/2;
int x=0,y=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==pas && b[i][j]==pas&& x==0)
{
x=i; y=j;
}
os<<pas<<" "<<x<<" "<<y;
is.close();
os.close();
return 0;
}