Pagini recente » Cod sursa (job #1057683) | Cod sursa (job #1961798) | Cod sursa (job #2147677) | Cod sursa (job #1574320) | Cod sursa (job #946238)
Cod sursa(job #946238)
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
char a[105][105];
struct Element{
int line;
int col;
};
int R[105][105],J[105][105],m,n,x1,y1,x2,y2,minimum=10005,ind,col;
Element v[105*105],vv[105*105];
void read()
{
int i,j;
bool yes=0;
char ch;
f>>n;
f>>m;
f>>noskipws;
for(i=1;i<=n;i++)
{
if(yes==0)
f>>ch;
yes=0;
for(j=1;j<=m;j++)
{
f>>a[i][j];
if(a[i][j]=='\n')
{
a[i][j]=' ';
yes=1;
}
if(a[i][j]=='R')
{
R[i][j]=1;
x1=i;
y1=j;
}
if(a[i][j]=='J')
{
J[i][j]=1;
x2=i;
y2=j;
}
if(a[i][j]=='X')
{
R[i][j]=-1;
J[i][j]=-1;
}
}
}
}
void bordare()
{
int i;
for(i=0;i<=n+1;i++)
R[0][i]=R[m+1][i]=J[0][i]=J[m+1][i]=-1;
for(i=0;i<=m+1;i++)
R[i][0]=R[i][n+1]=J[i][0]=J[i][n+1]=-1;
}
void Lee()
{
v[1].line=x1;v[1].col=y1;int k=1;
R[x1][y1]=1;
int i,x,y;
for(i=1;i<=k;i++)
{
x=v[i].line; y=v[i].col;
if(R[x][y+1]==0)
{
R[x][y+1]=R[x][y]+1;
v[++k].line=x;
v[k].col=y+1;
}
if(R[x][y-1]==0)
{
R[x][y-1]=R[x][y]+1;
v[++k].line=x;
v[k].col=y-1;
}
if(R[x+1][y]==0)
{
R[x+1][y]=R[x][y]+1;
v[++k].line=x+1;
v[k].col=y;
}
if(R[x-1][y]==0)
{
R[x][y+1]=R[x][y]+1;
v[++k].line=x-1;
v[k].col=y;
}
if(R[x+1][y+1]==0)
{
R[x+1][y+1]=R[x][y]+1;
v[++k].line=x+1;
v[k].col=y+1;
}
if(R[x-1][y-1]==0)
{
R[x-1][y-1]=R[x][y]+1;
v[++k].line=x-1;
v[k].col=y-1;
}
if(R[x+1][y-1]==0)
{
R[x+1][y-1]=R[x][y]+1;
v[++k].line=x+1;
v[k].col=y-1;
}
if(R[x-1][y+1]==0)
{
R[x-1][y+1]=R[x][y]+1;
v[++k].line=x-1;
v[k].col=y+1;
}
}
}
void Lee2()
{
vv[1].line=x2;vv[1].col=y2;int k=1;
J[x2][y2]=1;
int i,x,y;
for(i=1;i<=k;i++)
{
x=vv[i].line; y=vv[i].col;
if(J[x][y+1]==0)
{
J[x][y+1]=J[x][y]+1;
vv[++k].line=x;
vv[k].col=y+1;
}
if(J[x][y-1]==0)
{
J[x][y-1]=J[x][y]+1;
vv[++k].line=x;
vv[k].col=y-1;
}
if(J[x+1][y]==0)
{
J[x+1][y]=J[x][y]+1;
vv[++k].line=x+1;
vv[k].col=y;
}
if(J[x-1][y]==0)
{
J[x-1][y]=J[x][y]+1;
vv[++k].line=x-1;
vv[k].col=y;
}
if(J[x+1][y+1]==0)
{
J[x+1][y+1]=J[x][y]+1;
vv[++k].line=x+1;
vv[k].col=y+1;
}
if(J[x-1][y-1]==0)
{
J[x-1][y-1]=J[x][y]+1;
vv[++k].line=x-1;
vv[k].col=y-1;
}
if(J[x+1][y-1]==0)
{
J[x+1][y-1]=J[x][y]+1;
vv[++k].line=x+1;
vv[k].col=y-1;
}
if(J[x-1][y+1]==0)
{
J[x-1][y+1]=J[x][y]+1;
vv[++k].line=x-1;
vv[k].col=y+1;
}
}
}
void browse()
{
int i,j;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(R[i][j]!=0 && R[i][j]!=-1 && R[i][j]==J[i][j] && minimum>R[i][j])
{
minimum=R[i][j];
ind=i;
col=j;
}
g<<ind<<" "<<col<<" "<<minimum;
}
int main()
{
read();
bordare();
Lee();
Lee2();
browse();
}