Pagini recente » Cod sursa (job #122488) | Cod sursa (job #1643089) | Cod sursa (job #2851045) | Cod sursa (job #1605812) | Cod sursa (job #1333269)
#include <fstream>
#include <queue>
#define x first
#define y second
#define now q.front()
#define punct pair<int,int>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
punct nxt,start,stop;
queue <punct> q;
int i,j,v[102][102],r[102][102],n,m,a,b,ok,c,mini=10000;
char z[106];
const int dx[]={0,1,0,-1,1,1,-1,-1},dy[]={1,0,-1,0,1,-1,1,-1};
bool verif()
{
if(nxt.x>0&&nxt.y>0&&nxt.x<=n&&nxt.y<=m&&v[nxt.x][nxt.y]==0)
return true;
return false;
}
bool verifi()
{
if(nxt.x>0&&nxt.y>0&&nxt.x<=n&&nxt.y<=m&&r[nxt.x][nxt.y]==0)
return true;
return false;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin.get();
fin.get(z+1,m+1);
for(j=1;j<=m;j++)
{
if(z[j]=='J')
start=make_pair(i,j);
if(z[j]=='R')
stop=make_pair(i,j);
if(z[j]=='X')
{
v[i][j]=-1;
r[i][j]=-1;
}
}
}
q.push(start);
while(!q.empty())
{
for(a=0;a<8;a++)
{
nxt.x=now.x+dx[a];
nxt.y=now.y+dy[a];
if(verif())
{
v[nxt.x][nxt.y]=v[now.x][now.y]+1;
q.push(nxt);
}
}
q.pop();
}
q.push(stop);
while(!q.empty())
{
for(a=0;a<8;a++)
{
nxt.x=now.x+dx[a];
nxt.y=now.y+dy[a];
if(verifi())
{
r[nxt.x][nxt.y]=r[now.x][now.y]+1;
q.push(nxt);
}
}
q.pop();
}
a=0;
for(i=1;i<=n&&a==0;i++)
for(j=1;j<=m;j++)
if(v[i][j]==r[i][j]&&v[i][j]>0&&v[i][j]<mini)
{
mini=v[i][j];
b=i;
c=j;
}
fout<<mini+1<<" "<<b<<" "<<c;
fout.close();
return 0;
}