Pagini recente » Monitorul de evaluare | Cod sursa (job #1647464) | Cod sursa (job #3150512) | Cod sursa (job #1733045) | Cod sursa (job #2457540)
#include <iostream>
#include <fstream>
#define MAX 105
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
const short dirx[] = {-1,-1,0,1,1,1,0,-1};
const short diry[] = {0,1,1,1,0,-1,-1,-1};
const short dirN = 8;
int st, dr, cx[MAX], cy[MAX];
int n, m, minn, isol, jsol;
int ir, jr, ij, jj;
int board[MAX][MAX], ro[MAX][MAX], ju[MAX][MAX];
inline bool isOk(int i, int j){
if(i < 1 || j < 1 || i > n || j > m || board[i][j] == 1)
return false;
return true;
}
void parc(int i, int j, int v[MAX][MAX]){
st=1;
dr=1;
cx[1]=i;
cy[1]=j;
int x, y, nx, ny;
bool ok=true;
while(st <= dr && ok){
x=cx[st];
y=cy[st];
for(int pas=0; pas <= dirN && ok; pas++){
nx=x + dirx[pas];
ny=y + diry[pas];
if(isOk(nx, ny) && !v[nx][ny]){
v[nx][ny]=v[x][y] + 1;
dr++;
cx[dr]=nx;
cy[dr]=ny;
}
}
st++;
}
return;
}
int main (){
///1 -> Blocaj
///2 -> Romeo
///3 -> Julieta
fin>>n;
fin>>m;
char c[MAX];
fin.getline(c, MAX);
for(int i=1; i<=n; i++){
fin.getline(c, MAX);
for(int j=0; c[j]; j++){
if(c[j] == 'X')
board[i][j+1]=1;
if(c[j] == 'R'){
board[i][j+1]=2;
ir=i;
jr=j+1;
ro[i][j+1]=1;
}
if(c[j] == 'J'){
board[i][j+1]=3;
ij=i;
jj=j+1;
ju[i][j+1]=1;
}
}
}
parc(ir, jr, ro);
parc(ij, jj, ju);
minn=INT_MAX;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
if(ro[i][j] == ju[i][j] && ro[i][j] && ro[i][j] < minn){
minn=ro[i][j];
isol=i;
jsol=j;
}
fout<<minn<<" "<<isol<<" "<<jsol;
return 0;
}