Pagini recente » Cod sursa (job #2531607) | Cod sursa (job #2361096) | Cod sursa (job #1358390) | Cod sursa (job #2970899) | Cod sursa (job #1379008)
#include <iostream>
#include <fstream>
#include <algorithm>
#define Nmax 102
#define NrDir 8
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,a[Nmax][Nmax],ultim1,ultim2,prim1,prim2,b[Nmax][Nmax],k,drummin=100005;
char x[Nmax];
const int dl[] = {-1, 0, 1, -1 , -1, 0, 1, 1};
const int dc[] = {-1, -1, -1, 0, 1, 1 ,1 ,0};
struct Pozitie{
int lin,col;
}pj,p,v,C1[Nmax*Nmax],C2[Nmax*Nmax];
void citeste(){
f>>n>>m;
f.get();
for(i=1;i<=n;i++){
f.getline(x,Nmax+2);
for(j=1;j<=m;j++){
if(x[j-1] == 'X')
a[i][j] = -1, b[i][j] = -1;
else
if(x[j-1] == 'R')
C1[0].lin = i, C1[0].col = j, a[i][j] = 1;
else
if(x[j-1] == 'J')
C2[0].lin = i, C2[0].col = j, b[i][j] = 1;
else
if(x[j-1] == ' ')
a[i][j] = 0, b[i][j] = 0;
}
}
}
void bordare(){
for(i=0;i<=m+1;i++)
a[0][i]=a[n+1][i]=b[0][i]=b[n+1][i]=-1;
for(i=0;i<=n+1;i++)
a[i][0]=a[i][m+1]=b[i][0]=b[i][m+1]=-1;
}
int main()
{
citeste();
bordare();
while(prim1<=ultim1){
p=C1[prim1];
for(k=0;k<NrDir;k++){
v.lin=p.lin+dl[k];
v.col=p.col+dc[k];
if(a[v.lin][v.col]==0){
a[v.lin][v.col]=a[p.lin][p.col]+1;
ultim1++;
C1[ultim1]=v;
}
}
prim1++;
}
prim2=ultim2=0;
while(prim2 <= ultim2)
{
p=C2[prim2];
for( k = 0; k < 8; k ++)
{
v.lin = p.lin + dl[k], v.col = p.col + dc[k];
if(b[v.lin][v.col] == 0 )
{
b[v.lin][v.col] = b[p.lin][p.col] + 1;
ultim2++;
C2[ultim2]=v;
}
}
prim2++;
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]>0){
if(drummin>a[i][j])
drummin=a[i][j],pj.lin=i,pj.col=j;
}
}
g<<drummin<<' '<<pj.lin<<' '<<pj.col;
return 0;
}