Pagini recente » Cod sursa (job #1515042) | Cod sursa (job #2743169) | Cod sursa (job #3154743) | Cod sursa (job #2050139) | Cod sursa (job #1344235)
#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};
short n,m,A[101][101],B[101][101],X[10001],Y[10001];
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;
is>>n>>m;
is.get();
char c[102];
for(i=1;i<=n;i++)
{
is.getline(c,102);
for(j=0;j<strlen(c);j++)
{
if(c[j]==' ') B[i][j+1]=A[i][j+1]=0;
else if(c[j]=='X') B[i][j+1]=A[i][j+1]=-1;
else if(c[j]=='R') {ir=i; jr=j+1; B[i][j+1]=A[i][j+1]=0;}
else if(c[j]=='J') {ij=i; jj=j+1; B[i][j+1]=A[i][j+1]=0;}
}
}
A[ir][jr]=1;
X[1]=ir; Y[1]=jr;
int s=1,d=1;
while(s<=d && A[ij][jj]==0)
{
int i=X[s],j=Y[s];
for (int k=0;k<8;k++)
{
inou=i+di[k];
jnou=j+dj[k];
if(inside(inou,jnou)&& A[inou][jnou]==0)
{
A[inou][jnou]=A[i][j]+1;
d++;
X[d]=inou;
Y[d]=jnou;
}
}
s++;
}
B[ij][jj]=1;
X[1]=ij; Y[1]=jj;
s=1,d=1;
while(s<=d && B[ir][jr]==0)
{
int i=X[s],j=Y[s];
for (int k=0;k<8;k++)
{
inou=i+di[k];
jnou=j+dj[k];
if(inside(inou,jnou)&& B[inou][jnou]==0)
{
B[inou][jnou]=B[i][j]+1;
d++;
X[d]=inou;
Y[d]=jnou;
}
}
s++;
}
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;
}