Pagini recente » Cod sursa (job #2571366) | Cod sursa (job #290432) | Cod sursa (job #588466) | Cod sursa (job #1256244) | Cod sursa (job #1774749)
#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[103];
int d[8][2] = {{0,-1}, {-1,0}, {0,1}, {1,0}, {-1,-1},{-1,1},{1,1},{1,-1}};
int l[102][102],a[102][102];
void bordare()
{
int i;
for(i = 0; i <= n + 1; i++) l[i][0] = l[i][m + 1] = a[i][0]= a[i][m+1]= -1;
for(i = 0; i <= m + 1; i++) l[0][i] = l[n + 1][i] = a[0][i]= a[n+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 < 8; 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 < 8; 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=2147483600;
for(i=1;i<=n;i++)
{f.getline(s,101);
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;}
}
/* for(i=0;i<8;i++)
{for(j=0;j<2;j++)
cout<<d[i][j]<<endl;
cout<<endl;}*/
/*
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
if(a[i][j]==-1)g<<'X';
else g<<' ';
g<<endl;}
g<<endl;*/
bordare();
lee1(r,ju);
lee2(ju,r);
/*for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
g<<l[i][j]<<" ";
g<<endl;}*/
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+1<<" "<<lin<<" "<<col;
}