Pagini recente » Cod sursa (job #2174730) | Cod sursa (job #67735) | Cod sursa (job #2051024) | Cod sursa (job #2457172) | Cod sursa (job #2890385)
#include<bits/stdc++.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue<pair<int,int>> q;
int romeo[102][102],julieta[102][102];
int mini[102][102];
int n,m;
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
void bordare(){
for(int i=0;i<=n+1;i++){
mini[i][0]=1;
mini[i][m+1]=1;
}
for(int i=0;i<=m+1;i++){
mini[0][i]=1;
mini[n+1][i]=1;
}
}
void romeosLee(int x,int y){
int newx,newy;
q.push({x,y});
romeo[x][y]=1;
while(!q.empty()){
x=q.front().first;
y=q.front().second;
q.pop();
for(int i=0;i<8;i++){
newx=x+dx[i];
newy=y+dy[i];
if(mini[newx][newy]==-1&&(romeo[newx][newy]==0||romeo[newx][newy]>romeo[x][y]+1)){
romeo[newx][newy]=romeo[x][y]+1;
q.push({newx,newy});
}
}
}
}
void julietasLee(int x,int y){
int newx,newy;
q.push({x,y});
julieta[x][y]=1;
while(!q.empty()){
x=q.front().first;
y=q.front().second;
q.pop();
for(int i=0;i<8;i++){
newx=x+dx[i];
newy=y+dy[i];
if(mini[newx][newy]==-1&&(julieta[newx][newy]==0||julieta[newx][newy]>julieta[x][y]+1)){
julieta[newx][newy]=julieta[x][y]+1;
q.push({newx,newy});
}
}
}
}
int main()
{
int ok;
char c;
f>>n>>m;
f.get();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
mini[i][j]=-1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m||c!='\n';j++){
f.get(c);
if(c=='R')
mini[i][j]=2;
if(c=='J')
mini[i][j]=3;
if(c=='X')
mini[i][j]=4;
}
}
bordare();
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
if(mini[i][j]==2)
romeosLee(i,j);
if(mini[i][j]==3)
julietasLee(i,j);
}
ok=1;
for(int i=1;i<=n&&ok;i++)
for(int j=1;j<=m&&ok;j++)
if(romeo[i][j]>1&&romeo[i][j]==julieta[i][j]){
g<<julieta[i][j]<<' '<<i<<' '<<j<<'\n';
ok=0;
}
f.close();
g.close();
return 0;
}