Pagini recente » Cod sursa (job #3279943) | Cod sursa (job #2221922) | Cod sursa (job #3000808) | Cod sursa (job #2400378) | Cod sursa (job #498984)
Cod sursa(job #498984)
#include<fstream>
using namespace std ;
int RO[102][102], JU[102][102];
int n, m, i, j, lR, cR, lJ, cJ, ic, sc, lnou, cnou, dnou, tmin, aicix, aiciy;
char ch;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
struct elem
{
int l, c, d;
}C[10000], x, y;
int dx[]={-1, -1, 0, 1, 1, 1, 0, -1};
int dy[]={0, 1, 1, 1, 0, -1, -1, -1};
int main()
{
fin>>n>>m;
for (i=0; i<=n+1; i++)
RO[i][0]=RO[i][m+1]=JU[i][0]=JU[i][m+1]=-1;
for (j=1; j<=m; j++)
RO[0][j]=RO[n+1][j]=JU[0][j]=JU[n+1][j]=-1;
fin.get(ch);
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
fin.get(ch);
if (ch=='X')
RO[i][j]=JU[i][j]=-1;
else
if (ch==' ')
RO[i][j]=JU[i][j]=0;
else
if (ch=='R')
{
lR=i;
cR=j;
RO[i][j]=1;
JU[i][j]=0;
}
else
{
lJ=i;
cJ=j;
RO[i][j]=0;
JU[i][j]=1;
}
}
fin.get(ch);
}
ic=0;
sc=0;
C[sc].l=lR;
C[sc].c=cR;
C[sc].d=RO[lR][cR];
while (ic<=sc)
{
x=C[ic++];
for (i=0; i<8; i++)
{
lnou=x.l+dx[i];
cnou=x.c+dy[i];
if (RO[lnou][cnou]==0)
{
dnou=x.d+1;
RO[lnou][cnou]=dnou;
sc++;
C[sc].l=lnou;
C[sc].c=cnou;
C[sc].d=dnou;
}
}
}
ic=0;
sc=0;
C[sc].l=lJ;
C[sc].c=cJ;
C[sc].d=JU[lJ][cJ];
while (ic<=sc)
{
x=C[ic++];
for (i=0; i<8; i++)
{
lnou=x.l+dx[i];
cnou=x.c+dy[i];
if (JU[lnou][cnou]==0)
{
dnou=x.d+1;
JU[lnou][cnou]=dnou;
sc++;
C[sc].l=lnou;
C[sc].c=cnou;
C[sc].d=dnou;
}
}
}
tmin=100000;
for(i=1; i<=n; i++)
for (j=1; j<=m; j++)
if ((RO[i][j]==JU[i][j]) && RO[i][j]!=-1 && RO[i][j]!=0)
if (RO[i][j]<tmin)
{
tmin=RO[i][j];
aicix=i;
aiciy=j;
}
fout<<tmin<<' '<<aicix<<' '<<aiciy;
fout.close();
return 0;
}