56 std::vector<std::shared_ptr<Action>>
actions(std::shared_ptr<State> state)
override {
57 auto vacuum_state = std::dynamic_pointer_cast<VacuumState>(state);
58 std::vector<std::shared_ptr<Action>>
actions;
60 auto create_state = [&](
int x,
bool dirty0,
bool dirty1) {
61 return std::make_shared<VacuumState>(x, dirty0, dirty1);
65 if (vacuum_state->x == 0) {
66 if (vacuum_state->dirty0) {
67 actions.push_back(std::make_shared<Action>(
"Suck", 1, state, create_state(0,
false, vacuum_state->dirty1)));
69 actions.push_back(std::make_shared<Action>(
"Right", 1, state, create_state(1, vacuum_state->dirty0, vacuum_state->dirty1)));
72 if (vacuum_state->dirty1) {
73 actions.push_back(std::make_shared<Action>(
"Suck", 1, state, create_state(1, vacuum_state->dirty0,
false)));
75 actions.push_back(std::make_shared<Action>(
"Left", 1, state, create_state(0, vacuum_state->dirty0, vacuum_state->dirty1)));