Pagini recente » Cod sursa (job #2260747) | Cod sursa (job #2374995) | Cod sursa (job #2940446) | Borderou de evaluare (job #1569452) | Cod sursa (job #1645572)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,i,j,lj,cj,lr,cr,dir,p,u,OK,xx,yy,a[101][101],b[101][101],c[3][10001],dx[9]={0, -1, -1, 0, 1, 1, 1, 0, -1}, dy[9]={0, 0, 1, 1, 1, 0, -1, -1, -1};
char s[101];
int main()
{
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{f.get(s,101);
for(j=1;j<=m;j++)
{if(s[j-1]=='X') {a[i][j]=1;b[i][j]=1;}
else if(s[j-1]==' ') {a[i][j]=0;b[i][j]=0;}
else if(s[j-1]=='R') {a[i][j]=2;lr=i;cr=j;b[i][j]=2;}
else if(s[j-1]=='J') {a[i][j]=2;lj=i;cj=j;b[i][j]=2;}}
f.get();}
for(i=0;i<=n+1;i++)
{a[i][0]=1;b[i][0]=1;a[i][m+1]=1;b[i][m+1]=1;}
for(j=0;j<=m+1;j++)
{a[0][j]=1;b[0][j]=1;a[n+1][j]=1;b[n+1][j]=1;}
c[1][1]=lr;
c[2][1]=cr;
b[lr][cr]=2;
p=u=1;
while(p<=u)
{
xx=c[1][p];
yy=c[2][p];
for(dir=1;dir<=8;dir++)
if(b[xx+dx[dir]][yy+dy[dir]]==0){u++;
c[1][u]=xx+dx[dir];
c[2][u]=yy+dy[dir];
b[xx+dx[dir]][yy+dy[dir]]=b[xx][yy]+1;
}
++p;
}
c[1][1]=lj;
c[2][1]=cj;
p=u=1;
OK=1;
a[lj][cj]=2;
while(p<=u&&OK)
{
xx=c[1][p];
yy=c[2][p];
for(dir=1;dir<=8;dir++)
if(a[xx+dx[dir]][yy+dy[dir]]==0){u++;
c[1][u]=xx+dx[dir];
c[2][u]=yy+dy[dir];
a[xx+dx[dir]][yy+dy[dir]]=a[xx][yy]+1;
if(a[xx+dx[dir]][yy+dy[dir]]==b[xx+dx[dir]][yy+dy[dir]]&&a[xx+dx[dir]][yy+dy[dir]]!=1) {OK=0;dir=9;}
}
++p;
}
g<<xx+dx[dir]<<' '<<yy+dy[dir]<<' '<<a[xx+dx[dir]][yy+dy[dir]];
return 0;
}