Pagini recente » Cod sursa (job #1480872) | Cod sursa (job #943888) | Cod sursa (job #941307) | Cod sursa (job #954693) | Cod sursa (job #2790498)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstdio>
#define VMAX 2000000000
using namespace std;
FILE *f=fopen("rj.in","r");
ofstream g("rj.out");
queue <pair<int,int>>Q;
int n,m;
int a[105][105],b[105][105];
int di[8]= {-1,-1,0,1,1,1,0,-1};
int dj[8]= {0,1,1,1,0,-1,-1,-1};
int ri,rj,ji,jj;
int t=VMAX;
void bordare()
{
for(int i=0; i<=n+1; i++)
{
a[i][0]=-1;
a[i][m+1]=-1;
b[i][0]=-1;
b[i][m+1]=-1;
}
for(int j=0; j<=m+1; j++)
{
a[0][j]=-1;
a[n+1][j]=-1;
b[0][j]=-1;
b[n+1][j]=-1;
}
}
void cit()
{
fscanf(f,"%d %d\n",&n,&m);
bordare();
for(int i=1; i<=n; i++)
{
char c[110];
fgets(c+1,110,f);
for(int j=1; j<=m; j++)
{
if(c[j]=='\n')
c[j]=' ';
if(c[j]=='R')
{
a[i][j]=1;
ri=i;
rj=j;
}
else if(c[j]=='J')
{
b[i][j]=1;
ji=i;
jj=j;
}
else if(c[j]=='X')
{
a[i][j]=-1;
b[i][j]=-1;
}
else
{
a[i][j]=0;
b[i][j]=0;
}
}
}
}
void lee(int pi, int pj, int a[105][105])
{
Q.push({pi,pj});
while(!Q.empty())
{
int i=Q.front().first,j=Q.front().second;
Q.pop();
for(int v=0; v<8; v++)
{
int iv=i+di[v];
int jv=j+dj[v];
if(a[iv][jv]==0)
{
a[iv][jv]=a[i][j]+1;
Q.push({iv,jv});
}
}
}
}
int main()
{
cit();
lee(ri,rj,a);
lee(ji,jj,b);
int pozi,pozj;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<t)
{
t=a[i][j];
pozi=i;
pozj=j;
}
}
}
g<<t<<' '<<pozi<<' '<<pozj;
return 0;
}