Pagini recente » Cod sursa (job #1434249) | Cod sursa (job #2407009) | Cod sursa (job #1730156) | Cod sursa (job #2133387) | Cod sursa (job #2495363)
#include<iostream>
#include<stdio.h>
#include<algorithm>
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];
char asta[102];
int main ()
{
int n,m,inceput,sfarsit,minim=100000,sl=0,sc=0;
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[n+1][i]=-1;
}
cin.getline(asta,101);
for(int i=1; i<=n; i++)
{
cin.getline(asta,101);
for(int jj=0; asta[jj]!='\0'; jj++)
{
if(asta[jj]=='X')
a[i][jj+1]=-1;
if(asta[jj]=='J')
{
j.l=i;
j.c=jj+1;
}
if(asta[jj]=='R')
{
r.l=i;
r.c=jj+1;
}
}
}
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;
}