Pagini recente » Cod sursa (job #3603) | Cod sursa (job #43180) | Cod sursa (job #2881069) | Cod sursa (job #3224695) | Cod sursa (job #3294130)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int DMAX = 100; //dim max
///VARIANTA FARA STL
struct pozitie
{
short x, y;
};
pozitie C[DMAX * DMAX + 1]; //coada
int n, m;
int Ro[DMAX + 2][DMAX + 2]; //harta orasului pt romeo
int Ju[DMAX + 2][DMAX + 2]; //harta orasului pt julieta
pozitie pRo, pJu;
int tmin = DMAX * DMAX + 1, xmin, ymin; //datele de iesire
int d[8][2] = {{0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}};
ifstream fin("rj.in");
ofstream fout("rj.out");
void citire()
{
char c;
fin >> n >> m;
for(int i = 1; i <= n; i++)
{
fin.get(c);
for(int j = 1; j <= m; j++)
{
fin.get(c);
switch(c)
{
case 'R': //poz Romeo
pRo.x = i;
pRo.y = j;
Ro[i][j] = 1;
break;
case 'J': //poz Julieta
pJu.x = i;
pJu.y = j;
Ju[i][j] = 1;
break;
case 'X': //zona inchisa
Ro[i][j] = -1;
Ju[i][j] = -1;
}
}
}
}
void bordare()
{
int m1 = m + 1, n1 = n + 1;
for(int j = 0; j <= m1; j++)
Ro[0][j] = Ro[n1][j] = Ju[0][j] = Ju[n1][j] = -1;
for(int i = 0; i <= n1; i++)
Ro[i][0] = Ro[i][m1] = Ju[i][0] = Ju[i][m1] = -1;
}
void Lee(pozitie pstart, int L[][DMAX + 2])
{
pozitie crt, vec;
int p = 1, u = 1;
C[1] = pstart;
while(p <= u)
{
crt = C[p++];
for(int k = 0; k < 8; k++)
{
vec.x = crt.x + d[k][0];
vec.y = crt.y + d[k][1];
if(L[vec.x][vec.y] == 0)
{
L[vec.x][vec.y] = L[crt.x][crt.y] + 1;
C[++u] = vec;
}
}
}
}
int main()
{
citire();
bordare();
Lee(pRo, Ro);
Lee(pJu, Ju);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
if(Ro[i][j] > 0 && Ro[i][j] == Ju[i][j] && Ro[i][j] < tmin)
{
tmin = Ro[i][j];
xmin = i;
ymin = j;
}
fout << tmin << ' ' << xmin << ' ' << ymin;
fin.close();
fout.close();
return 0;
}