Pagini recente » Cod sursa (job #1530839) | Cod sursa (job #1076869) | Cod sursa (job #2606579) | Cod sursa (job #2017408) | Cod sursa (job #2487223)
#include<iostream>
#include<stdio.h>
using namespace std;
int dirl[8]={-1,-1,0,1,1,1,0,-1};
int dirc[8]={0,1,1,1,0,-1,-1,-1};
struct ase{
int l,c;
};
ase coada[10100];
ase j,r;
int a[102][102],b[102][102];
int main () {
int n,m,inceput,sfarsit,minim=100000,sl=0,sc=0;
char asta;
freopen("rj.in","r",stdin);
freopen("rj.out","w",stdout);
cin>>n>>m;
///bordare
for(int i=0;i<=n+1;i++){
a[i][0]=-1;
a[i][m+1]=-1;
}
for(int i=0;i<=m+1;i++){
a[0][i]=-1;
a[m+1][i]=-1;
}
asta=getchar();
for(int i=1;i<=n;i++){
for(int jj=1;jj<=m;jj++){
asta=getchar();
if(asta=='X')
a[i][jj]=-1;
if(asta=='J'){
j.l=i;
j.c=jj;
}
if(asta=='R'){
r.l=i;
r.c=jj;
}
}
asta=getchar();
}
for(int i=0;i<=n+1;i++)
for(int j=0;j<=m+1;j++)
b[i][j]=a[i][j];
a[j.l][j.c]=1;
inceput=1;
sfarsit=1;
coada[1].l=j.l;
coada[1].c=j.c;
while(inceput<=sfarsit){
for(int i=0;i<8;i++){
int lin=coada[inceput].l+dirl[i];
int col=coada[inceput].c+dirc[i];
if(a[lin][col]==0){
sfarsit++;
a[lin][col]=a[coada[inceput].l][coada[inceput].c]+1;
coada[sfarsit].l=lin;
coada[sfarsit].c=col;
}
}
inceput++;
}
b[r.l][r.c]=1;
inceput=1;
sfarsit=1;
coada[1].l=r.l;
coada[1].c=r.c;
while(inceput<=sfarsit){
for(int i=0;i<8;i++){
int lin=coada[inceput].l+dirl[i];
int col=coada[inceput].c+dirc[i];
if(b[lin][col]==0){
sfarsit++;
b[lin][col]=b[coada[inceput].l][coada[inceput].c]+1;
coada[sfarsit].l=lin;
coada[sfarsit].c=col;
}
}
inceput++;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]>0)
if(a[i][j]<minim){
minim=a[i][j];
sl=i;
sc=j;
}
cout<<minim<<" "<<sl<<" "<<sc;
return 0;
}