Pagini recente » Istoria paginii runda/doerm/clasament | Rating Florin Mihalache (Florinrm) | Cod sursa (job #3180079) | Cod sursa (job #720299) | Cod sursa (job #2216183)
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
short int n,m,v[105][105];
char cc,s[105];
struct poz
{
int x,y;
}st,sf,b,z;
queue <poz> c;
int dl[]={-1,-1,0,1,1,1,0,-1};
int dc[]={0,1,1,1,0,-1,-1,-1};
int i,j,nr;
short int ok[107][107];
int main()
{
f>>n>>m;
f.getline(s,105);
for (i=1;i<=n;i++)
{
f.getline(s,105);
for (j=0;j<m;j++)
{
cc=s[j];
if (cc=='X')
{
v[i][j+1]=ok[i][j+1]=-1;
}
else
if (cc=='R')
{
st.x=i;
st.y=j+1;
}
else
if (cc=='J')
{
sf.x=i;
sf.y=j+1;
}
}
}
for (i=0;i<=n+1;i++)
{
ok[i][m+1]=ok[i][0]=v[i][m+1]=v[i][0]=-1;
}
for (i=0;i<=m+1;i++)
{
v[n+1][i]=v[0][i]=ok[n+1][i]=ok[0][i]=-1;
}
c.push(st);
v[st.x][st.y]=1;
while (!c.empty())
{
b=c.front();
c.pop();
for (i=0;i<8;i++)
{
z.x=b.x+dl[i];
z.y=b.y+dc[i];
if (v[z.x][z.y]==0)
{
v[z.x][z.y]=v[b.x][b.y]+1;
c.push(z);
}
}
}
swap(st,sf);
ok[st.x][st.y]=1;
c.push(st);
int mini=1000000000;
while (!c.empty())
{
b=c.front();
c.pop();
for (i=0;i<8;i++)
{
z.x=b.x+dl[i];
z.y=b.y+dc[i];
if (ok[z.x][z.y]==0)
{
ok[z.x][z.y]=ok[b.x][b.y]+1;
c.push(z);
}
}
}
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
if (v[i][j]==ok[i][j]&&ok[i][j]!=-1&&ok[i][j]!=0)
{
if (v[i][j]<mini)
{
mini=v[i][j];
z.x=i;
z.y=j;
}
}
}
}
g<<mini<<" "<<z.x<<" "<<z.y;
return 0;
}