Задача про рыцарей и оруженосцев [требует правки]

253
09 декабря 2017, 08:31

Суть задачи заключается в следующем:

Три рыцаря, каждый в сопровождении оруженосца, съехались на берегу реки, намереваясь переправиться на другую сторону. Им удалось найти маленькую двухместную лодку, и переправа произошла бы легко. Но одно затруднение чуть было не помешало этому предприятию. Все оруженосцы отказались оставаться в обществе незнакомых рыцарей без своих хозяев. И все же переправа состоялась, все шесть человек благополучно перебрались на другой берег с помощью одной двухместной лодки. При этом соблюдалось условие, на котором настаивали оруженосцы. Как это было сделано?

Вот решение задачи из интернета с другим условием, которое подходит и сюда (припустим H - рыцарь, а W - оруженосец):

Помогите пожалуйста это все реализовать в с++ (в ооп желательно). Пришел к мысли, что использовать надо неориентированный граф либо дерево. Заранее спасибо.

Upd:

Пытался все это реализовать пока что через два массива, которые отображают текущее положение рыцарей и оруженосцев. Имеется функция, которая проверяет, не перебрались ли все люди на другой берег, но вот с основным циклом беда:

bool knights[3] = { 0,0,0 };
bool pages[3] = { 0,0,0 };
bool allCrossed() {
    for (int i = 0; i < 3; i++)
        if (!knights[i] || !pages[i])
            return 0;
    return 1;
}
int main()
{
    while (!allCrossed()) {
        ;// основной цикл
    }
    getchar();
    return 0;
}

Здесь я не вижу как можно начать новую итерацию и как ее завершить.

READ ALSO
Определить угол наклона комнаты

Определить угол наклона комнаты

Нужно изменить функцию user_loop() чтобы определить угол наклона комнатыВ комнате криволинейная поверхность

299
Логика DirectShow при работе с веб - камерой

Логика DirectShow при работе с веб - камерой

Думаю освоить DirectShow, так как помимо вебки далее придётся работать со звуком, а DS, как я понял, универсальное и актуальное на данный момент...

254
Произвольная функция в качестве слота в QObject::connect()

Произвольная функция в качестве слота в QObject::connect()

В Qt существует так называемый QGamepadManager Class который отвечает за подключение джойстика и получения с него сигналов при нажатии на кнопку или...

265
Сделать задачу на c++ [требует правки]

Сделать задачу на c++ [требует правки]

Уточнить корень уравнения x^2-x-03=0 на отрезке [1;2] с точностью Eps = 10^-5, используя метод деления отрезка пополам

199