Pagini recente » Cod sursa (job #642115) | Cod sursa (job #1525153) | Cod sursa (job #771740) | Cod sursa (job #830059) | Cod sursa (job #1884088)
#include <iostream>
#include <fstream>
#include <cstring>
#include <climits>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int dx[]={0, 1, 0, -1, -1, 1, -1, 1};
int dy[]={1, 0, -1, 0, -1, 1, 1,-1};
struct coord{int x,y;};
coord c[102],c2[102];
int n,m,a[102][102],xr,yr,xj,yj; int b[102][102];
void citire()
{
char c;
fin>>n>>m;
fin.get(c);
for (int i=1; i<=n; i++)
{
for (int k=1; k<=m; k++)
{ fin.get(c);
if(c=='X')b[i][k]=-1;
if(c==' ')b[i][k]=0;
if (c=='R') {xr=i; yr=k; b[i][k]=0;}
if (c=='J') {xj=i; yj=k; b[i][k]=0;}
a[i][k]=b[i][k];
}
fin.get(c);}
fin.close();
}
int interior(int x, int y)
{
return(x>=1&&x<=n&&y>=1&&y<=m);
}
void lee(int x,int y)
{
int p,u;
p=u=1;
c[p].x=x;
c[p].y=y;
a[x][y]=1;
while(p<=u)
{
x=c[p].x;
y=c[p].y;
p++;
for(int i=0;i<8;i++)
{
int xv=x+dx[i];
int yv=y+dy[i];
if(a[xv][yv]==0&&interior(xv,yv)==1)
{
u++;
a[xv][yv]=a[x][y]+1;
c[u].x=xv;
c[u].y=yv;
}
}
}
}
void lee2(int x,int y)
{
int p,u;
p=u=1;
c2[p].x=x;
c2[p].y=y;
b[x][y]=1;
while(p<=u)
{
x=c2[p].x;
y=c2[p].y;p++;
for(int i=0;i<8;i++)
{
int xv=x+dx[i];
int yv=y+dy[i];
if(b[xv][yv]==0&&interior(xv,yv)==1)
{
u++;
b[xv][yv]=b[x][y]+1;
c2[u].x=xv;
c2[u].y=yv;
}
}
}
}
int main()
{
citire();
lee(xr,yr);
lee2(xj,yj);
/* for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
fout<<a[i][j]<<" ";
fout<<endl;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
fout<<b[i][j]<<" ";
fout<<endl;
}*/
int xmin=INT_MAX,ymin=INT_MAX,tmin=INT_MAX;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]!=-1&&a[i][j]<tmin){xmin=i;ymin=j;tmin=a[i][j];}
}
fout<<tmin<<" "<<xmin<<" "<<ymin<<" ";
return 0;
}