Pagini recente » Cod sursa (job #595994) | Cod sursa (job #2291607) | Cod sursa (job #447279) | Cod sursa (job #2210597) | Cod sursa (job #1652190)
#include <iostream>
#include <fstream>
using namespace std;
int dl[]={-1,1,0,0,-1,-1,1,1};
int dc[]={0,0,1,-1,-1,1,-1,1};
struct coada
{
int lin,col;
};
coada d[105*105],pr,pj,p,v;
char c[101][101];
int a[105][105],b[105][105],i,j,n,m,prim,ultim,k,nr;
void lee()
{
prim=ultim=0;
d[0]=pr;
a[pr.lin][pr.col]=1;
while(prim<=ultim)
{
p=d[prim];
prim++;
for(k=0;k<8;k++)
{
v.lin=p.lin+dl[k];
v.col=p.col+dc[k];
if(a[v.lin][v.col]==0)
{
a[v.lin][v.col]=a[p.lin][p.col]+1;
ultim++;
d[ultim]=v;
}
}
}
}
void lee1()
{
prim=ultim=k=0;
d[0]=pj;
b[pj.lin][pj.col]=1;
while(prim<=ultim)
{
p=d[prim];
prim++;
for(k=0;k<8;k++)
{
v.lin=p.lin+dl[k];
v.col=p.col+dc[k];
if(b[v.lin][v.col]==0)
{
b[v.lin][v.col]=b[p.lin][p.col]+1;
ultim++;
d[ultim]=v;
}
}
}
}
int main()
{
ifstream f("rj.in");
ofstream g("rj.out");
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.get(c[i],m+1);
f.get();
for(j=0;j<m;j++)
{
if(c[i][j]==' ')
{
a[i][j+1]=0;
b[i][j+1]=0;
}
if(c[i][j]=='X')
{
a[i][j+1]=-1;
b[i][j+1]=-1;
}
if(c[i][j]=='R')
{
pr.lin=i;
pr.col=j+1;
a[i][j+1]=0;
b[i][j+1]=0;
}
if(c[i][j]=='J')
{
pj.lin=i;
pj.col=j+1;
a[i][j+1]=0;
b[i][j+1]=0;
}
}
}
for(i=0;i<=n+1;i++)
{
a[0][i]=a[n+1][i]=b[0][i]=b[n+1][i]=-1;
}
for(i=0;i<=m+1;i++)
{
a[i][0]=a[i][m+1]=b[i][0]=b[i][m+1]=-1;
}
lee();
lee1();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(a[i][j]!=-1 && a[i][j]!=0 && a[i][j]==b[i][j])
{
g<<i<<" "<<j<<" "<<a[i][j];
nr++;
}
if(nr==1)
{
break;
}
}
if(nr==1)
{
break;
}
}
f.close();
g.close();
return 0;
}