Суть задачи заключается в следующем:
Три рыцаря, каждый в сопровождении оруженосца, съехались на берегу реки, намереваясь переправиться на другую сторону. Им удалось найти маленькую двухместную лодку, и переправа произошла бы легко. Но одно затруднение чуть было не помешало этому предприятию. Все оруженосцы отказались оставаться в обществе незнакомых рыцарей без своих хозяев. И все же переправа состоялась, все шесть человек благополучно перебрались на другой берег с помощью одной двухместной лодки. При этом соблюдалось условие, на котором настаивали оруженосцы. Как это было сделано?
Вот решение задачи из интернета с другим условием, которое подходит и сюда (припустим 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;
}
Здесь я не вижу как можно начать новую итерацию и как ее завершить.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей