Pagini recente » Cod sursa (job #656494) | Cod sursa (job #3222227) | Cod sursa (job #1488792) | Cod sursa (job #2286112) | Cod sursa (job #1578849)
#include <fstream>
#include <iostream>
#include <queue>
#include <string>
#include <iomanip>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
string s;
struct str{
int x;
int y;
};
str e, r;
queue <str> q;
int j,a1[150][150],a2[150][150], n,m,i,ir,jr,ij,jj,dx[]={-1,1,1,-1,0, 1, 0, -1},dy[]={1,-1,1,-1,-1, 0, 1, 0},mini=500000,xm,ym;
char x;
void citire(){
fin>>n>>m;
getline(fin,s);
for(i=1;i<=n;i++)
{getline(fin,s);
//cout<<s<<endl;
for(j=1;j<=m;j++)
if(s[j-1]==' ')
{a1[i][j]=0;
a2[i][j]=0;
}
else if(s[j-1]=='X')
{a1[i][j]=-1;
a2[i][j]=-1;
}
else if(s[j-1]=='R')
{ir=i;jr=j;
a1[i][j]=-5;
a2[i][j]=-5;
}
else if(s[j-1]=='J')
{ij=i;jj=j;
a1[i][j]=-8;
a2[i][j]=-8
;
}
}
}
void bordare(){
for(i=0;i<=n+1;i++)
{a1[i][0]=-1;
a1[i][m+1]=-1;
}
for(i=0;i<=m+1;i++){
a1[n+1][i]=-1;
a1[0][i]=-1;
}
for(i=0;i<=n+1;i++)
{a2[i][0]=-1;
a2[i][m+1]=-1; }
for(i=0;i<=m+1;i++){
a2[n+1][i]=-1;
a2[0][i]=-1;
}
}
void prelucrez1(){
int k;
r.x=ir;
r.y=jr;
a1[ir][jr]=1;
q.push(r);
while(!q.empty()){
e=q.front();
q.pop();
for(k=0;k<8;k++){
r.x=e.x+dx[k];
r.y=e.y+dy[k];
if (a1[r.x][r.y] != -1 and (a1[r.x][r.y] ==0)) {
a1[r.x][r.y] = a1[e.x][e.y] + 1;
q.push(r);
}
}
}
}
void prelucrez2(){
int k;
r.x=ij;
r.y=jj;
a2[ij][jj]=1;
q.push(r);
while(!q.empty()){
e=q.front();
q.pop();
for(k=0;k<8;k++){
r.x=e.x+dx[k];
r.y=e.y+dy[k];
if (a2[r.x][r.y] != -1 and (a2[r.x][r.y] ==0)) {
a2[r.x][r.y] = a2[e.x][e.y] + 1;
q.push(r);
}
}
}
}
int main(){
citire();
bordare();
prelucrez1();
prelucrez2();
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{if(a1[i][j]==a2[i][j] and a2[i][j]>0 and a2[i][j]<mini)
{mini=a2[i][j];
xm=i;ym=j;
}
}
fout<<mini<<" "<<xm<<" "<<ym;
}