Pagini recente » Cod sursa (job #1165314) | Cod sursa (job #2265231) | Cod sursa (job #924723) | Cod sursa (job #2633358)
#include <bits/stdc++.h>
using namespace std;
const int mxN=105;
int dx[8]={0, 1, 0, -1, -1, 1, -1, 1};
int dy[8]={1, 0, -1, 0, -1, 1, 1,-1};
int n, m, xr, xj, yr, yj, matr[mxN][mxN], matj[mxN][mxN];
int xmin=-1, jmin=-1, ans=mxN*mxN+5;
char c, a[mxN][mxN];
queue<pair<int,int>>cords;
inline bool ok(int i, int j){
return i&&j&&i<=n&&j<=m;
}
void Lee(int x, int y, int mat[mxN][mxN]){
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
mat[i][j]=-1;
cords.push({x,y});
mat[x][y]=1;
while(!cords.empty()){
int i = cords.front().first;
int j = cords.front().second;
cords.pop();
for(int k=0; k<8; ++k){
int ni = i + dx[k];
int nj = j + dy[k];
if(ok(ni,nj)&&mat[ni][nj]==-1&&a[ni][nj]==' '){
mat[ni][nj]=1+mat[i][j];
cords.push({ni,nj});
}
}
}
}
int main(){
ifstream cin("rj.in");
ofstream cout("rj.out");
cin >> n >> m;
cin.get(c);
for(int i=1; i<=n; ++i){
for(int j=1; j<=m; ++j){
cin.get(c);
a[i][j]=c;
if(a[i][j]=='R'){
xr=i;
yr=j;
a[i][j]=' ';
}
else if(a[i][j]=='J'){
xj=i;
yj=j;
a[i][j]=' ';
}
}
cin.get(c);
}
Lee(xr,yr,matr);
Lee(xj,yj,matj);
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
if(matr[i][j]==matj[i][j]&&matr[i][j]<ans&&matr[i][j]!=-1)
ans=matr[i][j], xmin=i, jmin=j;
cout << ans << ' ' << xmin << ' ' << jmin;
}