Pagini recente » Cod sursa (job #580864) | Cod sursa (job #1318979) | Cod sursa (job #1541930) | Cod sursa (job #3157776) | Cod sursa (job #1774686)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
struct coord
{
int l,c;
};
coord r,ju,c[10000];
int m,n;
char s[100];
int d[4][2] = {{0,-1}, {-1,0}, {0,1}, {1,0}};
int l[101][101],a[101][101];
void bordare()
{
int i;
for(i = 0; i <= m + 1; i++) l[i][0] = l[i][n + 1] = a[i][0]= a[i][n+1]= -1;
for(i = 0; i <= n + 1; i++) l[0][i] = l[m + 1][i] = a[0][i]= a[m+1][i]= -1;
}
void lee1(coord inceput,coord sf)
{
coord vec, crt;
int p,u;
p = u = 1;
c[1] =inceput ;
while(p <= u && a[sf.l][sf.c]==0)
{
crt = c[p++];
for(int i = 0; i < 4; i++)
{
vec.l = crt.l + d[i][0];
vec.c = crt.c + d[i][1];
if(a[vec.l][vec.c] == 0)
{
a[vec.l][vec.c] = a[crt.l][crt.c] + 1;
c[++u] = vec;
}
}
}
}
void lee2(coord inceput,coord sf)
{
coord vec, crt;
int p,u;
p = u = 1;
c[1] =inceput ;
while(p <= u && l[sf.l][sf.c]==0)
{
crt = c[p++];
for(int i = 0; i < 4; i++)
{
vec.l = crt.l + d[i][0];
vec.c = crt.c + d[i][1];
if(l[vec.l][vec.c] == 0)
{
l[vec.l][vec.c] = l[crt.l][crt.c] + 1;
c[++u] = vec;
}
}
}
}
int main()
{ f>>n>>m;
f.get();
int lin,col,i,j, minx=INT_MAX;
for(i=1;i<=n;i++)
{f.getline(s,100);
for(j=0;j<m;j++)
if(s[j]=='R'){r.l=i;r.c=j+1;}
else if(s[j]=='J'){ju.l=i;ju.c=j+1;}
else if(s[j]=='X'){l[i][j+1]=a[i][j+1]=-1;}
}
bordare();
lee1(r,ju);
lee2(ju,r);
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]==l[i][j])
if(l[i][j]>0 && l[i][j]<minx){minx=l[i][j];lin=i;col=j;}
g<<minx<<" "<<lin<<" "<<col;
return 0;
}