Pagini recente » Cod sursa (job #2781789) | Cod sursa (job #256206) | Cod sursa (job #61238) | Cod sursa (job #1635998) | Cod sursa (job #946255)
Cod sursa(job #946255)
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
char a[105][105];
struct Element{
short int line;
short int col;
};
short 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()
{
short 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')
{
yes=1;
while(j<=m)
{
a[i][j]=' ';
j++;
}
break;
}
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()
{
short i;
for(i=0;i<=m+1;i++)
R[0][i]=R[n+1][i]=J[0][i]=J[n+1][i]=-1;
for(i=0;i<=n+1;i++)
R[i][0]=R[i][m+1]=J[i][0]=J[i][m+1]=-1;
}
void Lee()
{
v[1].line=x1;v[1].col=y1;short k=1;
R[x1][y1]=1;
short 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;short k=1;
J[x2][y2]=1;
short 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()
{
short 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<<minimum<<" "<<ind<<" "<<col<<"\n";
}
int main()
{
read();
bordare();
Lee();
Lee2();
browse();
}