Pagini recente » Cod sursa (job #2325864) | Cod sursa (job #1973090) | Istoria paginii runda/bkt/clasament | Istoria paginii runda/bulangandit1 | Cod sursa (job #2950764)
#include <fstream>
using namespace std;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
struct element
{
int i,j;
};
element coada[20010];
int n,m,i,j,pozi,p,q,pozj,minc=-2,d,ainit,binit,afin,bfin,a[105][105],b[105][105];
int dx[]={0,1,0,-1,0,1,1,-1,-1},dy[]={0,0,1,0,-1,1,-1,1,-1};
char s[105];
int main()
{
fin>>n>>m;
fin.get ();
for (i=1; i<=n; i++)
{
fin.getline (s,105);
for (j=1; j<=m; j++)
{
if (s[j-1]==' ')
a[i][j]=b[i][j]=0;
if (s[j-1]=='X')
a[i][j]=b[i][j]=-1;
if (s[j-1]=='R')
{
ainit=i;
binit=j;
}
if (s[j-1]=='J')
{
afin=i;
bfin=j;
}
}
}
p=1;
q=1;
coada[q].i=ainit;
coada[q].j=binit;
a[ainit][binit]=1;
while (p<=q&&a[afin][bfin]==0)
{
int l=coada[p].i;
int c=coada[p].j;
for (d=1; d<=8; d++)
{
int lv=l+dx[d];
int cv=c+dy[d];
if (lv<=n&&lv>0&&cv<=m&&cv>0)
{
if (a[lv][cv]==0)
{
a[lv][cv]=a[l][c]+1;
coada[++q]= {lv,cv};
}
}
}
p++;
}
p=1;
q=1;
coada[q].i=afin;
coada[q].j=bfin;
b[afin][bfin]=1;
while (p<=q&&b[ainit][binit]==0)
{
int l=coada[p].i;
int c=coada[p].j;
for (d=1; d<=8; d++)
{
int lv=l+dx[d];
int cv=c+dy[d];
if (lv<=n&&lv>0&&cv<=m&&cv>0)
{
if (b[lv][cv]==0)
{
b[lv][cv]=b[l][c]+1;
coada[++q]= {lv,cv};
}
}
}
p++;
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
if (a[i][j]>0&&a[i][j]==b[i][j]&&(a[i][j]<minc||minc==-2))
{
minc=a[i][j];
pozi=i;
pozj=j;
}
}
}
fout<<minc<<" "<<pozi<<" "<<pozj;
return 0;
}