Pagini recente » Istoria paginii runda/antr7/clasament | Cod sursa (job #3167405) | Cod sursa (job #2364126) | Cod sursa (job #2667207) | Cod sursa (job #1725299)
#include <fstream>
#include <queue>
#include <string>
using namespace std;
ifstream g("rj.in");
ofstream gg("rj.out");
int di[8] = {1,0,-1,0,-1,1,1,-1};
int dj[8] = {1,1,1,-1,-1,0,-1,0};
int N,M;
char c;
int start1,start2,start3,start4;
queue < pair <int, int> > coada;
void Read(int R[105][105], int J[105][105]){
g>> N >> M;
g.get(c);
for(int i = 1; i <= N ; i++)
{
int j=0;
while(g.get(c) && c != '\n')
{
j++;
if(c == ' ')
R[i][j] = J[i][j] = 0;
if(c == 'X')
R[i][j] = J[i][j] = -1;
if(c == 'R')
{
start1=i; start2=j;
R[i][j] = 1;
}
if(c == 'J')
{
start3=i; start4=j;
J[i][j] = 1;
}
}
}
}
void bording(int R[105][105], int J[105][105]){
for(int i=0; i<=N+1; i++){
R[i][0]=J[i][0]=R[i][M+1]=J[i][M+1]=-1;
}
for(int i=0; i<=M+1; i++){
R[0][i]=J[0][i]=R[N+1][i]=J[N+1][i]=-1;
}
}
void Lee(int startx, int starty, int Map[105][105]){
int i,j,i_urmator,j_urmator;
coada.push({startx,starty});
while( !coada.empty() ){
i = coada.front().first;
j = coada.front().second;
coada.pop();
for(int directie=0; directie < 8; directie ++){
i_urmator = i + di[directie];
j_urmator = j + dj[directie];
if(Map[i_urmator][j_urmator] == 0){
Map[i_urmator][j_urmator] = Map[i][j] + 1;
coada.push({i_urmator,j_urmator});
}
}
}
}
void Write(int R[105][105], int J[105][105] ){
int minn=1000,x,y;
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= M; j++){
if(R[i][j] == J[i][j] && R[i][j] < minn && R[i][j]!= -1 && R[i][j] != 0)
minn=R[i][j],y=j,x=i;
}
}
gg<<minn<<" "<<x<<" "<<y;
}
int main()
{
int R[105][105],J[105][105];
Read(R,J);
bording(R,J);
Lee(start1,start2,R);
Lee(start3,start4,J);
Write(R,J);
return 0;
}