Pagini recente » Cod sursa (job #99839) | Cod sursa (job #2188865) | Cod sursa (job #2476088) | Cod sursa (job #2162467) | Cod sursa (job #2424495)
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int ro[105][105],ju[105][105],n,m,p[105][105],r1,r2,j1,j2,mn=100000005,xmn,ymn;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
char c;
queue< pair<int,int> > q;
void leero(int x, int y)
{
int st,dr,k;
while(!q.empty()) q.pop();
q.push({x,y});
ro[x][y]=1;
while(!q.empty())
{
st=q.front().first;
dr=q.front().second;
for(k=0;k<8;k++)
{
if(ro[st+dx[k]][dr+dy[k]]==0) {ro[st+dx[k]][dr+dy[k]]=ro[st][dr]+1;q.push({st+dx[k],dr+dy[k]});}
}
q.pop();
}
}
void leeju(int x,int y)
{
int st,dr,k;
while(!q.empty()) q.pop();
q.push({x,y});
ju[x][y]=1;
while(!q.empty())
{
st=q.front().first;
dr=q.front().second;
for(k=0;k<8;k++)
{
if(ju[st+dx[k]][dr+dy[k]]==0) {ju[st+dx[k]][dr+dy[k]]=ju[st][dr]+1;q.push({st+dx[k],dr+dy[k]});}
}
q.pop();
}
}
int main()
{
int i,j;
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
f.get(c);
if(c=='X') p[i][j]=ro[i][j]=ju[i][j]=-1;
else if(c==' ') p[i][j]=ro[i][j]=ju[i][j]=0;
else if(c=='R') {r1=i;r2=j;}
else if(c=='J') {j1=i;j2=j;}
}
f.get();
}
for(i=0;i<=n+1;i++) p[i][0]=p[i][m+1]=ro[i][0]=ro[i][m+1]=ju[i][0]=ju[i][m+1]=-1;
for(j=0;j<=m+1;j++) p[0][j]=p[n+1][j]=ro[0][j]=ro[n+1][j]=ju[0][j]=ju[n+1][j]=-1;
leero(r1,r2);
leeju(j1,j2);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(ro[i][j]==ju[i][j]&&ro[i][j]<mn&&ro[i][j]>0) {mn=ro[i][j]; xmn=i;ymn=j;}
}
g<<mn<<" "<<xmn<<" "<<ymn;
return 0;
}