Pagini recente » Cod sursa (job #926944) | Cod sursa (job #2821036) | Cod sursa (job #1626746) | Cod sursa (job #2759077) | Cod sursa (job #2571948)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int DMAX = 100;
struct pozitie
{
int x, y;
};
int M, N, L[DMAX + 2][DMAX + 2], L1[DMAX + 2][DMAX + 2]; ///Labirintul
pozitie C1[DMAX * DMAX + 1]; ///Coada
int p, u, tmin = 1000000, x, y;
pozitie pr;
pozitie pj;
int d[8][2] = {{0, -1}, { -1, 0}, {0, 1}, {1, 0}, {1, 1}, { -1, -1}, { -1, 1}, {1, -1}}; ///Modalitati de deplasare
void bordare()
{
int i;
for(i = 0; i <= N + 1; i++)
L[i][0] = L[i][M + 1] = -1;
for(i = 0; i <= M + 1; i++)
L[0][i] = L[N + 1][i] = -1;
}
void Lee(pozitie pstart, int L1[][DMAX + 2])
{
pozitie vec, crt;
p = u = 1;
C1[1] = pstart;
L1[pstart.x][pstart.y] = 1;
while(p <= u)
{
crt = C1[p++];
for(int k = 0; k < 8; k++)
{
vec.x = crt.x + d[k][0];
vec.y = crt.y + d[k][1];
if(L1[vec.x][vec.y] == 0)
{
L1[vec.x][vec.y] = L1[crt.x][crt.y] + 1;
C1[++u] = vec;
}
}
}
}
void citire()
{
char c[DMAX+2];
f >> N >> M;
f.get();
for(int i = 1; i <= N; i++)
{
f.getline(c+1,DMAX+1);
for(int j = 1; j <= M; j++)
{
switch(c[j])
{
case 'X':///Perete
L[i][j] = -1;
break;
case 'R':///Pozitie Romeo
pr.x = i;
pr.y = j;
L[i][j] = 0;
break;
case 'J':///Pozitie Julieta
pj.x = i;
pj.y = j;
L[i][j] = 0;
}
}
}
}
int main()
{
citire();
bordare();
/**cout<<N<<' '<<M<<'\n';
for(int i = 0; i <= N+1; i++)
{
for(int j = 0; j <= M+1; j++)
cout << L[i][j] << ' ';
cout << '\n';
}*/
for(int i = 0; i <= N + 1; i++)
for(int j = 0; j <= M + 1; j++)
L1[i][j] = L[i][j]; ///Copiere matrice
Lee(pr, L);
Lee(pj, L1);
for(int i = 1; i <= N; i++)
for(int j = 1; j <= M; j++)
{
if(L[i][j] > 0 && L1[i][j] == L[i][j] && L[i][j] < tmin)
{
tmin = L[i][j];
x = i;
y = j;
}
}///Det punctului de intalnire
g << tmin << ' ' << x << ' ' << y;
}