Pagini recente » Cod sursa (job #2452287) | Cod sursa (job #3248364) | Cod sursa (job #3162079) | Cod sursa (job #506568) | Cod sursa (job #2496091)
#include <bits/stdc++.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n,m,lromeo,cromeo,ljul,cjul;
int dirL[]={-1,-1,0,1,1,1,0,-1},dirC[]={0,1,1,1,0,-1,-1,-1};
int a1[103][103],a2[103][103];
char s;
struct ura
{
int linie,coloana;
};
ura coada[101*101+3];
void citeste()
{
in>>n>>m;
int i,j;
for(i=1;i<=n;i++)
{
in.get(s);
for(j=1;j<=m;j++)
{
in.get(s);
if(s=='R')
{
lromeo=i;
cromeo=j;
a1[i][j]=1;
}
else
if(s=='J')
{
ljul=i;
cjul=j;
a2[i][j]=1;
}
else
if(s=='X')
{
a1[i][j]=-1;
a2[i][j]=-1;
}
}
}
}
void afiseaza()
{
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
out<<a1[i][j]<<" ";
}
out<<'\n';
}
}
void bordeaza()
{
int i,j;
for(i=0;i<=m+1;++i)
{
a1[0][i]=-1;
a2[0][i]=-1;
}
for(i=0;i<=n+1;++i)
{
a1[i][0]=-1;
a2[i][0]=-1;
}
for(i=0;i<=m+1;++i)
{
a1[n+1][i]=-1;
a2[n+1][i]=-1;
}
for(i=0;i<=n+1;++i)
{
a1[i][m+1]=-1;
a2[i][m+1]=-1;
}
}
void rezolva()
{
int inc,sf,lin,col,i,j;
inc=1;
sf=1;
coada[1].linie=lromeo;
coada[1].coloana=cromeo;
while(inc<=sf)
{
for(i=0;i<8;i++)
{
lin=coada[inc].linie+dirL[i];
col=coada[inc].coloana+dirC[i];
if(a1[lin][col]==0)
{
sf++;
coada[sf].linie=lin;
coada[sf].coloana=col;
a1[lin][col]=a1[coada[inc].linie][coada[inc].coloana]+1;
}
}
inc++;
}
coada[1].linie=ljul;
coada[1].coloana=cjul;
inc=1;
sf=1;
while(inc<=sf)
{
for(i=0;i<8;i++)
{
lin=coada[inc].linie+dirL[i];
col=coada[inc].coloana+dirC[i];
if(a2[lin][col]==0)
{
sf++;
coada[sf].linie=lin;
coada[sf].coloana=col;
a2[lin][col]=a2[coada[inc].linie][coada[inc].coloana]+1;
}
}
inc++;
}
}
void afiseazaterogeu()
{
int timpminim=10000000,x,y,i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(a1[i][j]==a2[i][j]&&a1[i][j]>0)
{
if(a1[i][j]<timpminim)
{
timpminim=a1[i][j];
x=i;
y=j;
}
}
}
}
out<<timpminim<<" "<<x<< " "<<y;
}
int main()
{
citeste();
bordeaza();
rezolva();
afiseazaterogeu();
return 0;
}