Pagini recente » Cod sursa (job #1838122) | Cod sursa (job #2581668) | Cod sursa (job #1940998) | Cod sursa (job #1237270) | Cod sursa (job #2295329)
#include <iostream>
#include <fstream>
#include <queue>
#include <climits>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
#define nmax 105
int n,m;
int r_mat[nmax][nmax];
int j_mat[nmax][nmax];
bool config[nmax][nmax];
const int dx[8]={0,1,0,-1,1,-1,1,-1};
const int dy[8]={1,0,-1,0,1,-1,-1,1};
queue< pair<int,int> > qRomeo;
queue< pair<int,int> > qJulieta;
pair<int,int> r_intrare;
pair<int,int> j_intrare;
struct triple{
public:
int first = INT_MAX;
int second;
int third;
};
void citeste(){
in>>n>>m;
{
char temp[2];
in.getline(temp,1);
}
for (int i = 1; i <= n; i++)
{
char c[nmax];
in.getline(c,nmax,'\n');
for(int j = 0; c[j]!=0;j++){
if(c[j] == 'R'){
r_intrare.first=i;
r_intrare.second=j+1;
}
if(c[j] == 'J'){
j_intrare.first=i;
j_intrare.second=j+1;
}
if(c[j] == 'X'){
config[i][j+1]=1;
}
}
}
qRomeo.push(r_intrare);
r_mat[r_intrare.first][r_intrare.second]=1;
qJulieta.push(j_intrare);
j_mat[j_intrare.first][j_intrare.second]=1;
}
int main()
{
citeste();
for(int i = 0; i <= n+1; i++){
config[i][0]=1;
config[i][m+1]=1;
}
for(int i = 0;i<=m+1;i++){
config[n+1][i]=1;
config[0][i]=1;
}
while(!qRomeo.empty()){
pair<int,int> pc;
pc=qRomeo.front();
qRomeo.pop();
int new_x,new_y;
for (int k=0;k<8;k++){
new_x=pc.first+dx[k];
new_y=pc.second+dy[k];
if(config[new_x][new_y]==0){
if(r_mat[new_x][new_y]==0){
r_mat[new_x][new_y]=r_mat[pc.first][pc.second]+1;
qRomeo.push(make_pair(new_x,new_y));
}
}
}
}
while(!qJulieta.empty()){
pair<int,int> pc;
pc=qJulieta.front();
qJulieta.pop();
int new_x,new_y;
for (int k=0;k<8;k++){
new_x=pc.first+dx[k];
new_y=pc.second+dy[k];
if(config[new_x][new_y]==0){
if(j_mat[new_x][new_y]==0){
j_mat[new_x][new_y]=j_mat[pc.first][pc.second]+1;
qJulieta.push(make_pair(new_x,new_y));
}
}
}
}
triple rez;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(r_mat[i][j] == j_mat[i][j] && r_mat[i][j]!=0){
if(r_mat[i][j] < rez.first){
rez.first=r_mat[i][j];
rez.second=i;
rez.third=j;
}
}
}
}
out<<rez.first<<' '<<rez.second<<' '<<rez.third;
return 0;
}