Pagini recente » Cod sursa (job #2403483) | Cod sursa (job #1463152) | Cod sursa (job #1637099) | Cod sursa (job #3190225) | Cod sursa (job #2719051)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,a[100][100];
struct cord
{
int x=-1,y;
}cr[101],cj[101];
void citire()
{
char x[100];
fin.getline(x,0);
for(int i=0;i<n;i++)
{
fin.getline(x,100);
for(int j=0;j<m;j++)
{
if(x[j]=='X') a[i][j]=-1;
if(x[j]=='R') cr[1].x=i,cr[1].y=j,a[i][j]=1;
if(x[j]=='J') cj[1].x=i,cj[1].y=j,a[i][j]=1;
}
}
}
void el(cord v[],int &n)
{
int i;
for(i=1,n--;i<=n;i++) v[i]=v[i+1];
}
void Lee()
{
int i,j,x,y,d,lr=1,lj=1;
for(d=1;lr&&lj;d++)
{
while(lr&&a[cr[1].x][cr[1].y]==d)
{
for(i=-1;i<2;i++) for(j=-1;j<2;j++)
{
if(!i&&!j) continue;
x=cr[1].x+i,y=cr[1].y+j;
if(x>=0&&y>=0&&x<n&&y<m) if(!a[x][y]) cr[++lr].x=x,cr[lr].y=y,a[x][y]=a[cr[1].x][cr[1].y]+1;
}
el(cr,lr);
}
while(lj&&a[cj[1].x][cj[1].y]==d)
{
for(i=-1;i<2;i++) for(j=-1;j<2;j++)
{
if(!i&&!j) continue;
x=cj[1].x+i,y=cj[1].y+j;
if(x>=0&&y>=0&&x<n&&y<m) if(!a[x][y]) cj[++lj].x=x,cj[lj].y=y,a[x][y]=a[cj[1].x][cj[1].y]+1;
else if(a[x][y]==d+1) for(int p=1;p<=lr;p++) if(a[cr[p].x][cr[p].y]==d+1&&cr[p].x==x&&cr[p].y==y)
{
fout<<d+1<<' '<<cr[p].x+1<<' '<<cr[p].y+1;
return;
}
}
el(cj,lj);
}
}
}
int main()
{
fin>>n>>m;
citire();
Lee();//for(int i=0;i<n;i++) {for(int j=0;j<m;j++) {if(a[i][j]>=0) cout<<' ';cout<<a[i][j]<<' ';}cout<<endl;}
return 0;
}