Pagini recente » Cod sursa (job #2516258) | Cod sursa (job #1605735) | Cod sursa (job #559668) | Cod sursa (job #1863690) | Cod sursa (job #876996)
Cod sursa(job #876996)
#include <fstream>
#include <iostream>
#include<string.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n,m,x1,x2,y1,y2,sol=0,mini=10404;
const int dx[]={0,1,1,1,0,-1,-1,-1};
const int dy[]={1,1,0,-1,-1,-1,0,1};
int mr[101][101];
int mj[101][101];
struct c
{
int px[10404];
int py[10404];
}c;
struct s
{
int px[10404];
int py[10404];
}s;
void citire()
{
int i,j;
char v[101];
in>>n>>m;
for(i=0;i<=n;i++)
{
in.getline(v,m+1);
for(j=1;j<=m;j++)
{
if(v[j-1]=='R')
{
mr[i][j]=1;
x1=i;
y1=j;
}
if(v[j-1]=='J')
{
mr[i][j]=0;
x2=i;
y2=j;
}
if(v[j-1]=='X')mr[i][j]=-1;
if(v[j-1]==' ') mr[i][j]=0;
}
}
}
void bordare()
{
int i,j;
for(i=0;i<=n+1;i++)
{
mr[i][0]=-1;
mr[i][m+1]=-1;
}
for(i=1;i<=m;i++)
{
mr[0][i]=-1;
mr[n+1][i]=-1;
}
}
void copiere()
{
int i,j;
for(i=0;i<=n+1;i++)
{
for(j=0;j<=m+1;j++)
{
mj[i][j]=mr[i][j];
}
}
}
void lr()
{
int a,b,k,prim=0,ultim=0;
c.px[prim]=x1;
c.py[prim]=y1;
while(prim<=ultim&&mr[x2][y2]==0)
{
a=c.px[prim];
b=c.py[prim];
prim++;
for(k=0;k<8;k++)
{
if(mr[a+dx[k]][b+dy[k]]==0&&mr[a+dx[k]][b+dy[k]]!=-1)
{
ultim++;
c.px[ultim]=a+dx[k];
c.py[ultim]=b+dy[k];
mr[a+dx[k]][b+dy[k]]=mr[a][b]+1;
}
}
}
}
void lj()
{
int a,b,k,prim=0,ultim=0;
c.px[prim]=x2;
c.py[prim]=y2;
while(prim<=ultim&&mj[x1][y1]==0)
{
a=c.px[prim];
b=c.py[prim];
prim++;
for(k=0;k<8;k++)
{
if(mj[a+dx[k]][b+dy[k]]==0&&mj[a+dx[k]][b+dy[k]]!=-1)
{
ultim++;
c.px[ultim]=a+dx[k];
c.py[ultim]=b+dy[k];
mj[a+dx[k]][b+dy[k]]=mj[a][b]+1;
}
}
}
}
void rez()
{
int i,j,ok=1,k=32776,xf,yf;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(mr[i][j]==mj[i][j]&&(mj[i][j]!=-1)&&(mr[i][j]>0))
{
if(mj[i][j]<k)
{
k=mj[i][j];
xf=i;
yf=j;
}
}
}
}
out<<k<<" "<<xf<<" "<<yf;
}
int main()
{
int i,j,mini2=102,mini3=103,ok=1;
citire();
bordare();
copiere();
lr();
mj[x1][y1]=0;
mj[x2][y2]=1;
lj();
rez();
in.close();
out.close();
return 0;
}