Pagini recente » Cod sursa (job #190117) | Cod sursa (job #3160361) | Cod sursa (job #1188855) | Cod sursa (job #103122) | Cod sursa (job #2667908)
#include <fstream>
#include <iostream>
#include <queue>
#define MAXVALUE 110
#define MINIVALUE 100010
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int R[MAXVALUE][MAXVALUE], J[MAXVALUE][MAXVALUE]; ///matrix J,R
int xPos[8] = {0,-1,-1,-1,0,1,1,1}, yPos[8] = {-1,-1,0,1,1,1,0,-1};
void lee(int mat[][MAXVALUE], int line, int column)
{
pair<int,int> elem;
pair<int,int> v;
queue<pair<int,int>> q;
q.push(make_pair(line, column));
while(!q.empty())
{
elem = q.front();
q.pop();
for (int i=0; i < 8; i++)
{
v.first = elem.first + xPos[i];
v.second = elem.second + yPos[i];
if (mat[v.first][v.second] == 0)
{
q.push(v);
mat[v.first][v.second] = mat[elem.first][elem.second] + 1;
}
}
}
}
int main()
{
int width, height;
f>>width>>height;
//f.get();
///margini -1
for (int i=0; i <= width + 1; i++)
{
R[i][0] =-1;
J[i][0] = -1;
R[i][height + 1] = -1;
J[i][height + 1] = -1;
}
for (int j=0; j <= height + 1; j++)
{
R[0][j] = -1;
J[0][j] = -1;
R[width + 1][j] = -1;
J[width + 1][j] = -1;
}
char s[105]; ///buffer
int xR = 0,yR = 0, xJ = 0,yJ = 0;
for (int i = 1; i <= width; i++)
{
//f.getline(s,105);
//cout<<i<<" "<<s<<"\n";
for (int j=0; j < height; j++)
{
if (s[j] == 'X')
{
R[i][j+1] = -1;
J[i][j+1] = -1;
///pun -1 pe unde nu se poate trece
}
if (s[j] == 'R')
{
///pun 1 pt Romeo in R
R[i][j+1] = 1;
xR = i;
yR = j+1;
}
if (s[j] == 'J') ///pun 1 in matricea julietei unde am j
{
///pun 1 pt Julieta in J
J[i][j+1] = 1;
xJ = i;
yJ = j+1;
}
}
s[0] = '\0';
}
//cout<<xR<<" "<<yR<<" "<<xJ<<" "<<yJ<<"\n";
lee(R,xR,yR);
lee(J,xJ,yJ);
int minim = MINIVALUE;
int xMin = 0, yMin = 0;
for(int i = 1; i <= width; i++)
{
for (int j = 1; j <= height; j++)
{
if (R[i][j] == J[i][j] && R[i][j] > 0 && R[i][j] < minim)
{
minim = R[i][j];
xMin = i;
yMin = j;
}
}
}
g<<minim<<" "<<xMin<<" "<<yMin;
return 0;
}