Pagini recente » Cod sursa (job #1177611) | Cod sursa (job #1083484) | Cod sursa (job #16120) | Cod sursa (job #3004785) | Cod sursa (job #2638519)
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
const int NMAX=110, dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1};
int n,m,harta[NMAX][NMAX];
int matR[NMAX][NMAX],matJ[NMAX][NMAX];
char s[NMAX];
struct pozitie{
int x,y;
}pozR,pozJ,coada[NMAX*NMAX*10],pozMn;
void citire()
{
fin>>n>>m;
fin.get();
for (int i=1; i<=n; i++){
fin.getline(s,NMAX);
for (int j=0; j<m; j++){
if (s[j]=='X')
harta[i][j+1]=-1;
if (s[j]=='R'){
pozR.x=i;
pozR.y=j+1;
}
if (s[j]=='J'){
pozJ.x=i;
pozJ.y=j+1;
}
}
}
}
bool ok(pozitie a)
{
return (a.x>=1 && a.x<=n && a.y>=1 && a.y<=m);
}
void lee(pozitie a, int mat[NMAX][NMAX])
{
for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
mat[i][j]=harta[i][j];
}
}
mat[a.x][a.y]=1;
int prim,ultim;
prim=ultim=1;
coada[prim]=a;
pozitie container,vecin;
while (prim<=ultim){
container=coada[prim];
prim++;
for (int k=0; k<8; k++){
vecin.x=container.x+dl[k];
vecin.y=container.y+dc[k];
if (ok(vecin)){
if (mat[vecin.x][vecin.y]==0){
mat[vecin.x][vecin.y]=mat[container.x][container.y]+1;
ultim++;
coada[ultim]=vecin;
}
}
}
}
}
void rezolvare()
{
lee(pozR,matR);
lee(pozJ,matJ);
int mn=100000000;
for (int i=1; i<=n; i++){
for (int j=1; j<=m; j++){
if (matR[i][j]==matJ[i][j] && matR[i][j]>0){
if (matR[i][j]<mn){
mn=matR[i][j];
pozMn.x=i;
pozMn.y=j;
}
}
}
}
}
void afisare()
{
fout<<matR[pozMn.x][pozMn.y]<<' '<<pozMn.x<<' '<<pozMn.y;
}
int main()
{
citire();
fin.close();
rezolvare();
afisare();
fout.close();
return 0;
}