Pagini recente » Cod sursa (job #144675) | Cod sursa (job #37717) | Cod sursa (job #2862718) | Cod sursa (job #652528) | Cod sursa (job #1579919)
#include <stdio.h>
#include <ctype.h>
#include <queue>
#include <climits>
#include <string.h>
using std::queue;
using std::pair;
using std::make_pair;
int dx[] = {1,0,0,-1,1,1,-1,-1};
int dy[] = {0,1,-1,0,1,-1,1,-1};
queue < pair <int, int> > Q;
int n,m,l;
int hartar[102][102];
int hartaj[102][102];
int mini,minj,minim = INT_MAX;
int main()
{
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
char s[100];
int i,j,ic,jc,ji,jj,dir;
scanf("%d %d\n",&n,&m);
for(i = 0; i < n ; ++i)
{
gets(s);
l = strlen(s);
for(j = 0; j <= l; ++j)
{
if(s[j] == 'X')
hartar[i][j] = hartaj[i][j] = -1;
else
if(s[j] == 'R'){
hartar[i][j] = 1;
Q.push(make_pair(i,j));
}
else if(s[j] == 'J')
{
hartaj[i][j] = 1;
ji = i;
jj = j;
}
}
}
while(!Q.empty())
{
i = Q.front().first;
j = Q.front().second;
Q.pop();
for(dir = 0; dir < 8; ++dir)
{
ic = i + dx[dir];
jc = j + dy[dir];
if(ic >= 0 && jc >= 0 && ic < n && jc < m && hartar[ic][jc] == 0)
{
hartar[ic][jc] = hartar[i][j] + 1;
Q.push(make_pair(ic,jc));
}
}
}
Q.push(make_pair(ji,jj));
while(!Q.empty())
{
i = Q.front().first;
j = Q.front().second;
Q.pop();
for(dir = 0; dir < 8; ++dir)
{
ic = i + dx[dir];
jc = j + dy[dir];
if(ic >= 0 && jc >= 0 && ic < n && jc < m && hartaj[ic][jc] == 0)
{
hartaj[ic][jc] = hartaj[i][j] + 1;
Q.push(make_pair(ic,jc));
}
}
}
for(i = 0; i < n; ++i){
for(j = 0; j < m ; ++j)
if(hartar[i][j] == hartaj[i][j] && hartar[i][j] < minim && hartar[i][j] > 0)
{
mini = i;
minj = j;
minim = hartar[i][j];
}
}
printf("%d %d %d\n",minim,mini+1,minj+1);
return 0;
}