Pagini recente » Cod sursa (job #91669) | Cod sursa (job #2563218) | Cod sursa (job #331952) | Cod sursa (job #1943433) | Cod sursa (job #1919717)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int DMAX=101;
struct pozitie
{
int x,y;
};
pozitie C[DMAX*DMAX+1];
int N,M;
int ro[DMAX][DMAX],ju[DMAX][DMAX];
int tmin=DMAX*DMAX+1,minx,miny;
pozitie pro,pju;
int d[8][2] = {{0, -1},{-1,-1}, { -1, 0},{-1,1}, {0, 1}, {1, 1}, {1, 0}, {1,-1}};
void bordare()
{
int M1=M+1,N1=N+1;
for(int j=0; j<=M1; j++)
ro[0][j]=ro[N1][j]=ju[0][j]=ju[N1][j]=-1;
for(int i=0; i<=N1; i++)
ro[i][0]=ro[i][M1]=ju[i][0]=ju[i][M1]=-1;
}
void citire()
{
char c;
f.get();
for(int i=1; i<=N; i++)
{
char c[101];
f.getline(c+1,101);
for(int j=1; j<=M; j++)
{
switch(c[j])
{
case 'R':
pro.x=i;
pro.y=j;
ro[i][j]=1;
break;
case 'J':
pju.x=i;
pju.y=j;
ju[i][j]=1;
break;
case 'X':
ro[i][j]=-1,ju[i][j]=-1;
}
}
}
}
void Lee(pozitie pstart, int L[DMAX][DMAX])
{
pozitie crt,vec;
int p=1,u=1;
C[1]=pstart;
while(p<=u)
{
crt=C[p++];
for(int k=0; k<8; k++)
{
vec.x=crt.x+d[k][0];
vec.y=crt.y+d[k][1];
if(L[vec.x][vec.y]==0)
{
L[vec.x][vec.y]=L[crt.x][crt.y]+1;
C[++u]=vec;
}
}
}
}
int main()
{
f>>N>>M;
citire();
bordare();
Lee(pro,ro);
Lee(pju,ju);
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
if(ro[i][j]==ju[i][j] && ro[i][j]<tmin && ro[i][j]>0)
{
tmin=ro[i][j];
minx=i;
miny=j;
}
g<<tmin<<' '<<minx<<' '<<miny;
return 0;
}