Pagini recente » Monitorul de evaluare | Cod sursa (job #1587608) | Cod sursa (job #2526457) | Cod sursa (job #1261388) | Cod sursa (job #1326646)
#include <iostream>
#include <cstring>
#include <fstream>
#include <iomanip>
using namespace std;
struct pozitie { int lin,col; };
pozitie c[10002];
int main()
{
int v[101][101];
int m,n,i,j,prim,ultim,t;
char x;
pozitie J,R,p,ve;
int dl[]={-1,1,0,0,-1,-1,1,1};
int dc[]={0,0,1,-1,-1,1,1,-1};
ifstream f("rj.in");
ofstream g("rj.out");
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
x=f.get();
if(j==1 && x=='\n')
{
j--;
continue;
}
if(x=='X')
{
v[i][j]=-1;
}
if(x==' ')
{
v[i][j]=0;
}
if(x=='R')
{
v[i][j]=1;
R.lin=i;
R.col=j;
}
if(x=='J')
{
v[i][j]=0;
J.lin=i;
J.col=j;
}
if(x=='\n' && j<=m)
{
while(j<=m)
{ v[i][j]=0;j++; }
}
}
}
for(i=0;i<=m+1;i++)
{
v[0][i]=v[n+1][i]=-1;
}
for(i=0;i<=n+1;i++)
{
v[i][0]=v[i][m+1]=-1;
}
prim=ultim=0;
c[0]=R;
while(v[J.lin][J.col]==0 && prim<=ultim)
{
p=c[prim];
prim++;
for(i=1;i<=8;i++)
{
ve.lin=p.lin+dl[i];
ve.col=p.col+dc[i];
if(v[ve.lin][ve.col]==0)
{
v[ve.lin][ve.col]=v[p.lin][p.col]+1;
c[ultim]=ve;
ultim++;
}
}
}
if(v[J.lin][J.col]%2==0)
{
t=v[J.lin][J.col]/2;
g<<t<<" ";
}
else{
t=v[J.lin][J.col]/2+1; g<<t<<" ";
}
g<<'\n';
for(ultim=ultim;ultim!=0;ultim--)
{
if(v[c[ultim].lin][c[ultim].col]==t)
{
J.lin=c[ultim].lin;
J.col=c[ultim].col;
break;
}
}
g<<J.lin<<" "<<J.col;
g<<'\n';
return 0;
}