#include <iostream>
using namespace std;
#define M 5
#define N 10
bool solve(char A[M][N], int p1, int p2);
bool path(char A[M][N], int p1, int p2);
bool safe(char A[M][N], int p1, int p2) {
if (p1 >= 0 && p1 < M && p1 < N && p2 >= 0 && p2 < M && p2 < N && A[p1][p2] == '.') {
return true;
}
return false;
}
int main() {
int p1, p2;
char A[M][N] = { { '#', '.', '.', '.', '.', '.', '.', '.', '#', '.' },
{ '#', '.', '.', '#', '#', '#', '#', '.', '#', 'O' },
{ '#', 'P', '.', '.', '.', '#', '.', '.', '#', '.' },
{ '#', '#', '.', '.', '.', '#', '.', '.', '#', '.' },
{ '#', '#', '#', '#', '#', '#', '.', '.', '.', '.' } };
//looking for popeye.
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
if (A[i][j] == 'P') { p1 = i; p2 = j; break; }
}
}
solve(A, p1, p2);
return 0;
}
bool solve(char A[M][N], int p1, int p2) {
if (path(A, p1, p2) == false) {
cout << "NO" << endl;
}
return true;
}
bool path(char A[M][N], int p1, int p2) {
if (A[p1][p2] == 'O') {
cout << "YES" << endl;
return true;
}
if (safe(A, p1, p2) == true) {
if (path(A, p1 + 1, p2) == true)
return true;
if (path(A, p1 - 1, p2) == true)
return true;
if (path(A, p1, p2 + 1) == true)
return true;
if (path(A, p1, p2 - 1) == true)
return true;
}
return false;
} |