Pagini recente » Cod sursa (job #2093321) | Cod sursa (job #444509) | Cod sursa (job #566951) | Cod sursa (job #210648) | Cod sursa (job #2340759)
#include <iostream>
#include <fstream>
#include <queue>
#define NMAX 105
using namespace std;
ifstream fi("rj.in");
ofstream fo("rj.out");
int N, M;
int hartaR[NMAX][NMAX];
int hartaJ[NMAX][NMAX];
int diri[] = { 1, 0, 0,-1, 1,-1,-1, 1};
int dirj[] = { 0,-1, 1, 0, 1,-1, 1,-1};
int poziR, poziJ, pozjJ, pozjR;
queue<pair<int,int> > q;
string s[NMAX];
int mini, minj, minn = 0x3f3f3f3f;
bool Check(int x, int y) {return (x > 0 && y > 0 && x <= N && y <= M && hartaR[x][y] != -1);}
void Lee(int harta[NMAX][NMAX],int i, int j)
{
q.push({i,j});
while(!q.empty())
{
int x = q.front().first;
int y = q.front().second;
q.pop();
for(int k = 0; k < 8; ++k)
{
int xx = x + diri[k];
int yy = y + dirj[k];
if(Check(xx,yy))
{
if(harta[xx][yy] > harta[x][y] + 1)
{
harta[xx][yy] = harta[x][y] + 1;
q.push({xx,yy});
}
}
}
}
}
int main()
{
fi >> N >> M;
for(int i = 0; i <= N; ++i)
getline(fi,s[i]);
for(int i = 1; i <= N; ++i)
{
for(int j = 0; j < M; ++j)
{
if(s[i][j] == 'R')
{
hartaR[i][j+1] = 1;
poziR = i;
pozjR = j+1;
hartaJ[i][j+1] = 0x3f3f3f3f;
}
else if(s[i][j] == 'J')
{
hartaJ[i][j+1] = 1;
poziJ = i;
pozjJ = j+1;
hartaR[i][j+1] = 0x3f3f3f3f;
}
else if(s[i][j] == 'X')
hartaJ[i][j+1] = hartaR[i][j+1] = -1;
else
hartaJ[i][j+1] = hartaR[i][j+1] = 0x3f3f3f3f;
}
}
Lee(hartaR, poziR, pozjR);
Lee(hartaJ, poziJ, pozjJ);
for(int i = 1; i <= N; ++i)
{
for(int j = 1; j <= M; ++j)
{
if(hartaJ[i][j] == hartaR[i][j] && hartaR[i][j] != -1 && hartaJ[i][j] < minn)
{
minn = hartaJ[i][j];
mini = i;
minj = j;
}
}
}
fo <<minn << " "<< mini << " " << minj;
}