Pagini recente » Cod sursa (job #1679737) | Cod sursa (job #19326) | Cod sursa (job #2752815) | Cod sursa (job #520403) | Cod sursa (job #3135480)
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
short VeciniX[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
short VeciniY[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
struct Punct{
int x;
int y;
};
queue<Punct> qJ;
queue<Punct> qR;
int linii, coloane;
int MatJulieta[101][101] = {0};
int MatRomeo[101][101] = {0};
bool InMat(Punct P){
return P.x > 0 && P.x <= linii && P.y > 0 && P.y <= coloane;
}
void Lee(int mat[][101], queue<Punct> &q){
while (!q.empty()){
Punct frn = q.front();
for (int i = 0; i < 8; i++){
Punct Vecin;
Vecin.x = frn.x + VeciniX[i];
Vecin.y = frn.y + VeciniY[i];
if (InMat(Vecin) && mat[Vecin.x][Vecin.y] == 0){
mat[Vecin.x][Vecin.y] = mat[frn.x][frn.y] + 1;
q.push(Vecin);
}
}
q.pop();
}
}
int main(){
fin >> linii >> coloane;
for (int i = 0; i <= linii; i++){
string str;
getline(fin , str);
for (int j = 0; j < str.size(); j++){
if (str[j] == 'R') {
MatRomeo[i][j + 1] = 1;
qR.push({i, j + 1});
}
else if (str[j] == 'J') {
MatJulieta[i][j + 1] = 1;
qJ.push({i, j + 1});
}
else if (str[j] == 'X') {
MatRomeo[i][j+1] = -1;
MatJulieta[i][j+1] = -1;
}
}
}
Lee(MatRomeo, qR);
Lee(MatJulieta, qJ);
for (int i = 1; i <= linii; i++){
for (int j = 1; j <= coloane; j++){
if (MatRomeo[i][j] == MatJulieta[i][j] && MatRomeo[i][j] > 0){
fout << MatRomeo[i][j] << " " << i << " " << j << " " << " ";
break;
}
}
}
return 0;
}