Pagini recente » Cod sursa (job #1952797) | Cod sursa (job #2431048) | Cod sursa (job #366822) | Cod sursa (job #2563366) | Cod sursa (job #2147772)
#include <fstream>
#include <queue>
#define N 102
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,matr[N][N],matj[N][N];
int dx[]={-1,-1,0,1,1,1,0,-1},dy[]={0,1,1,1,0,-1,-1,-1};
int min1=N*N;
char strg[N];
int xi,yi,xf,yf,c1,c2;
char x;
void Lee(int mat[N][N],int xi,int yi){
int ii,jj;
queue <pair <int, int > > Q;
mat[xi][yi]=1;
Q.push(make_pair(xi,yi));
while(!Q.empty())
{
for(int k=0;k<8;k++)
{
ii=Q.front().first+dx[k];
jj=Q.front().second+dy[k];
if(!(ii>=1&&ii<=n&&jj>=1&&jj<=m))
continue;
if(mat[ii][jj]==0)
{
mat[ii][jj]=mat[Q.front().first][Q.front().second]+1;
Q.push(make_pair(ii,jj));
}
}
Q.pop();
}
}
int main()
{
f >> n >> m ;
f.get();
for ( int i=1;i<=n;i++)
{
f.getline( strg , N ) ;
for ( int j = 0 ; j < m ; j ++ )
{
if ( strg[j] == 'X' )
matr[i][j+1]=matj[i][j+1]=-1;
else
if(strg[j] == 'R')
{
xi=i;
yi=j+1;
}
else
if(strg[j]=='J')
{
xf=i;
yf=j+1;
}
}
}
Lee(matr,xi,yi);
Lee(matj,xf,yf);
for ( int i = 1 ; i <= n ; i ++ )
for ( int j = 1 ; j <= m ; j ++ )
if ( matr[i][j] == matj[i][j] && matr[i][j] > 0 && matr[i][j] < min1 )
{
min1=matr[i][j];
c1=i;
c2=j;
}
g << min1 << " " << c1 << " " << c2 ;
return 0;
}