Pagini recente » Cod sursa (job #1022022) | Cod sursa (job #930115) | Cod sursa (job #2692887) | Cod sursa (job #3283704) | Cod sursa (job #908175)
Cod sursa(job #908175)
#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=10001;
int x=0,y=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==b[i][j] && a[i][j]>0 && b[i][j]>0)
if(pas>a[i][j])
{
pas=a[i][j];x=i; y=j;
}
os<<pas<<" "<<x<<" "<<y;
is.close();
os.close();
return 0;
}