def generate_successors(self, current_node):
        successors = []

        for m_index in range(0, 3):
            for c_index in range(0, 3):
                # check if boat can fit the pair
                if 0 < m_index + c_index <= 2:
                    # boat on left side
                    if not current_node.get_boat_state():
                        state = State(current_node.get_m_number_left() - m_index
                                      , current_node.get_c_number_left() - c_index
                                      , current_node.get_m_number_right() + m_index
                                      , current_node.get_c_number_right() + c_index
                                      , not current_node.get_boat_state()
                                      , current_node
                                      , current_node.get_state_depth() + 1)
                    else:
                        state = State(current_node.get_m_number_left() + m_index
                                      , current_node.get_c_number_left() + c_index
                                      , current_node.get_m_number_right() - m_index
                                      , current_node.get_c_number_right() - c_index
                                      , not current_node.get_boat_state()
                                      , current_node
                                      , current_node.get_state_depth() + 1)
                    if state.is_valid() and not self.check_visited(state) and not self.check_scheduled(state):
                        successors.append(state)

        return successors
    def generate_successors(self, current_node):

        successors = []

        # generates only boat size pairs of persons
        for m_index in range(0, 3):
            for c_index in range(0, 3):

                # check if boat can fit the pair
                if 0 < m_index + c_index <= 2:
                    # boat on left side
                    if not current_node.get_boat_state():
                        state = State(current_node.get_m_number_left() - m_index
                                      , current_node.get_c_number_left() - c_index
                                      , current_node.get_m_number_right() + m_index
                                      , current_node.get_c_number_right() + c_index
                                      , not current_node.get_boat_state()
                                      , current_node
                                      , current_node.get_state_depth() + 1)
                    # boat on right side
                    else:
                        state = State(current_node.get_m_number_left() + m_index
                                      , current_node.get_c_number_left() + c_index
                                      , current_node.get_m_number_right() - m_index
                                      , current_node.get_c_number_right() - c_index
                                      , not current_node.get_boat_state()
                                      , current_node
                                      , current_node.get_state_depth() + 1)
                    if state.is_valid() and state not in self.__visited:
                        successors.append(state)

        return successors