Pagini recente » Cod sursa (job #2587249) | Cod sursa (job #2809621) | Cod sursa (job #1100984) | Cod sursa (job #1323606) | Cod sursa (job #1789178)
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
//In cazul existentei mai multor solutii se va afisa solutia in care linia punctului de intalnire este minima. Daca si asa exista mai multe solutii, se va afisa cea in care coloana punctului de intalnire este minima.
const int DMAX = 100;
struct pozitie
{
int x, y;
};
int M, N;
int R[DMAX + 2][DMAX + 2], J[DMAX + 2][DMAX + 2];
pozitie C[DMAX * DMAX + 1], jl, rm;
int p, u = 0;
int d[8][2] = {{ -1, -1}, { -1, 0}, { -1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}}; //Modalitati de deplasare in labirint
void bordare()
{
int i;
for(i = 0; i <= M + 1; i++)
R[i][0] = R[i][N + 1] = J[i][0] = J[i][N + 1] = -1;
for(i = 0; i <= N + 1; i++)
R[0][i] = R[M + 1][i] = J[0][i] = J[M + 1][i] = -1;
}
void Lee(int L[][DMAX + 2], pozitie start, pozitie oprit)
{
pozitie vec, crt;
p = u = 1;
C[1] = start;
while(p <= u && L[oprit.x][oprit.y] == 0)
{
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()
{
ifstream f("rj.in");
ofstream g("rj.out");
char c[DMAX + 1];
f >> M >> N;
f.get();
for(int i = 1; i <= M; i++)
{
f.getline(c, DMAX + 1);
for(int j = 0; j < N; j++)
{
switch(c[j])
{
case 'X':
R[i][j + 1] = J[i][j + 1] = -1;
break;
case ' ':
R[i][j + 1] = J[i][j + 1] = 0;
break;
case 'R':
R[i][j + 1] = 1;
rm.x = i;
rm.y = j + 1;
break;
case 'J':
J[i][j + 1] = 1;
jl.x = i;
jl.y = j + 1;
}
}
}
bordare();
Lee(R, rm, jl);
Lee(J, jl, rm);
/*for(int i = 1; i <= M; i++)
{
for(int j = 1; j <= N; j++)
cout << setw(3) << R[i][j];
cout << endl;
}
cout<<endl;
for(int i = 1; i <= M; i++)
{
for(int j = 1; j <= N; j++)
cout << setw(3) << J[i][j];
cout << endl;
}*/
int ok = 0;
for(int i = 1; i <= M && ok == 0; i++)
{
for(int j = 1; j <= N ; j++)
if(R[i][j] > 0 && R[i][j] == J[i][j])
{
g << R[i][j] << ' ' << i << ' ' << j;
ok = 1;
break;
}
}
f.close();
g.close();
return 0;
}