Pagini recente » Cod sursa (job #2510303) | Cod sursa (job #1585309) | Cod sursa (job #466438) | Cod sursa (job #1523576) | Cod sursa (job #524370)
Cod sursa(job #524370)
#include<fstream>
#include<iostream>
using namespace std;
int R[102][102],J[102][102],N,M,xR,yR,xJ,yJ;
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};
int xX,yX,D=630;
void read()
{
int i,j;
char c;
ifstream f ("rj.in");
f>>N>>M;f>>noskipws>>c;
for( i=1;i<=N;i++)
for( j=1;j<=M;j++)
{
f>>noskipws>>c;
if(c=='X') {R[i][j]=-2;J[i][j]=-2;}
if(c==' ') {R[i][j]=-1;J[i][j]=-1;}
if(c=='R') {xR=i;yR=j;R[i][j]=-1;J[i][j]=-1;}
if(c=='J'){xJ=i;yJ=j;R[i][j]=-1;J[i][j]=-1;}
if(j==M)f>>noskipws>>c;
}
f.close();
}
void bordare()
{
int i;
for ( i=0;i<=N+1;i++)
{
R[i][0]=R[i][M+1]=-2;
J[i][0]=J[i][M+1]=-2;
}
for ( i=0;i<=M+1;i++)
{
R[0][i]=R[N+1][i]=-2;
J[0][i]=J[N+1][i]=-2;
}
}
void fillR(int x,int y)
{
for(int dir=0;dir<8;dir++)
if((R[x+dx[dir]][y+dy[dir]]>=0&&R[x+dx[dir]][y+dy[dir]]>R[x][y]+1)||(R[x+dx[dir]][y+dy[dir]]==-1))
{
R[x+dx[dir]][y+dy[dir]]=R[x][y]+1;
fillR(x+dx[dir],y+dy[dir]);
}
}
void fillJ(int x,int y)
{
for(int dir=0;dir<8;dir++)
if((J[x+dx[dir]][y+dy[dir]]>=0&&J[x+dx[dir]][y+dy[dir]]>J[x][y]+1)||(J[x+dx[dir]][y+dy[dir]]==-1))
{
J[x+dx[dir]][y+dy[dir]]=J[x][y]+1;
fillJ(x+dx[dir],y+dy[dir]);
}
}
void cauta()
{
int i,j;
for(i=1;i<=N;i++)
for( j=1;j<=M;j++)
{
if(R[i][j]==J[i][j]&&R[i][j]<D&&R[i][j]>0) {D=R[i][j];xX=i;yX=j;}
}
ofstream g ("rj.out");
g<<D<<' '<<xX<<' '<<yX;
g.close();
}
int main()
{
read();
bordare();
R[xR][yR]=1;
J[xJ][yJ]=1;
fillR(xR,yR);
fillJ(xJ,yJ);
cauta();
return 0;
}
/*
*/