69 std::vector<std::shared_ptr<Action>>
actions(std::shared_ptr<State> state)
override {
70 auto maze_state = std::dynamic_pointer_cast<MazeState>(state);
71 std::vector<std::shared_ptr<Action>>
actions;
73 auto create_state = [&](
int x,
int y) {
74 return std::make_shared<MazeState>(maze_state->maze, x, y);
78 if (maze_state->x > 0 && maze_state->maze[maze_state->x - 1][maze_state->y] != 1) {
79 actions.push_back(std::make_shared<Action>(
"Up", 1, state, create_state(maze_state->x - 1, maze_state->y)));
81 if (maze_state->x < maze_state->maze.size() - 1 && maze_state->maze[maze_state->x + 1][maze_state->y] != 1) {
82 actions.push_back(std::make_shared<Action>(
"Down", 1, state, create_state(maze_state->x + 1, maze_state->y)));
84 if (maze_state->y > 0 && maze_state->maze[maze_state->x][maze_state->y - 1] != 1) {
85 actions.push_back(std::make_shared<Action>(
"Left", 1, state, create_state(maze_state->x, maze_state->y - 1)));
87 if (maze_state->y < maze_state->maze[0].size() - 1 && maze_state->maze[maze_state->x][maze_state->y + 1] != 1) {
88 actions.push_back(std::make_shared<Action>(
"Right", 1, state, create_state(maze_state->x, maze_state->y + 1)));