Pagini recente » Cod sursa (job #2354917) | Cod sursa (job #2179383) | Cod sursa (job #1094634) | Cod sursa (job #3178553) | Cod sursa (job #3281610)
#include <iostream>
#include <fstream>
#include <queue>
#include <iomanip>
using namespace std;
const int NMAX=100;
ifstream f("rj.in");
ofstream g("rj.out");
int N,M,dmin=NMAX*NMAX,dx,dy;
int LJ[NMAX+2][NMAX+2];
int LR[NMAX+2][NMAX+2];
int d[8][2] = {{1,0},{0,1},{-1,0},{0,-1},{1,1},{-1,-1},{-1,1},{1,-1}};
struct pozitie{
int x,y;
};
pozitie pJ,pR;
queue<pozitie> C;
void citire(){
char c;
f >> N >> M;
f.ignore();
for(int i=1;i<=N;i++){
for(int j=1;j<=M;j++){
f.get(c);
if(c=='X') LJ[i][j]=LR[i][j]=-1;
else if(c=='R'){
pR.x=i;
pR.y=j;
LR[i][j]=1;
}
else if(c=='J'){
pJ.x=i;
pJ.y=j;
LJ[i][j]=1;
}
}
f.ignore();
}
}
void bordare(){
int i;
for(i=0;i<=N+1;i++)
LJ[i][0]=LJ[i][M+1]=LR[i][0]=LR[i][M+1]=-1;
for(i=1;i<=M;i++)
LJ[0][i]=LJ[N+1][i]=LR[0][i]=LR[N+1][i]=-1;
}
void LeeJ(){
pozitie crt,vec;
C.push(pJ);
while(!C.empty()){
crt=C.front();
C.pop();
for(int k=0;k<8;k++){
vec.x=crt.x+d[k][0];
vec.y=crt.y+d[k][1];
if(LJ[vec.x][vec.y]==0){
LJ[vec.x][vec.y]=LJ[crt.x][crt.y]+1;
C.push(vec);
}
}
}
}
void LeeR(){
pozitie crt,vec;
C.push(pR);
while(!C.empty()){
crt=C.front();
C.pop();
for(int k=0;k<8;k++){
vec.x=crt.x+d[k][0];
vec.y=crt.y+d[k][1];
if(LR[vec.x][vec.y]==0){
LR[vec.x][vec.y]=LR[crt.x][crt.y]+1;
C.push(vec);
}
}
}
}
void parcurgere(){
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
if(LJ[i][j]==LR[i][j] && LJ[i][j]>0 && LJ[i][j]<dmin){
dmin=LJ[i][j];
dx=i;
dy=j;
}
}
int main()
{
citire();
bordare();
LeeJ();
LeeR();
parcurgere();
g << dmin << ' ' << dx << ' ' << dy;
return 0;
}