"Занимательные задачи по информатике", Босова Л.Л., Босова А.Ю., Коломенская Ю.Г.
Задача о переправе — это задача, где людей или предметы нужно перевезти на другой берег, соблюдая правила перевозки. Лодка может вмещать ограниченное число пассажиров, а некоторых участников нельзя оставлять вместе без перевозчика. Чтобы найти решение, нужно учитывать не только состав каждого рейса, но и то, кто остаётся на берегах и где находится лодка. Такая запись помогает не пропустить запрещённый ход и довести план до конца.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Переправа — перемещение людей или предметов с одного берега на другой с помощью лодки. В задаче важно перечислить всех участников и договориться, какие берега считаются исходным и целевым. Тогда понятно, откуда начинается движение и кого именно нужно перевезти.
Перевозчик — участник, который управляет лодкой и может перевозить других. Иногда его присутствие на берегу обязательно: без него некоторые участники могут попасть в опасную ситуацию. Это понятие помогает проверить не только пассажиров лодки, но и тех, кто остаётся без присмотра.
Ограничение переправы — условие, которое должно выполняться при каждом рейсе или после него. Например, лодка может вмещать только перевозчика и одного пассажира, а некоторых участников нельзя оставлять вместе без перевозчика. Если заранее выписать такие правила, проще отсеять неподходящие ходы.
Состояние задачи — описание того, кто находится на каждом берегу и где стоит лодка. Например: «слева перевозчик и пассажир, справа второй пассажир, лодка слева». Такая запись нужна, чтобы точно проследить изменения после каждого рейса и не потерять участников по дороге.
Сначала уточняют цель: всех ли участников нужно перевезти или только некоторых. Это задаёт конечное состояние, с которым можно будет сравнить результат. Если цель не записать, легко остановиться раньше времени или продолжить лишние рейсы.
Перед решением выписывают правила: кто умеет управлять лодкой, сколько человек в неё помещается и какие сочетания нельзя оставлять на берегу. Это нужно потому, что привычные на вид действия могут быть запрещены условием. Например, свободное место в лодке не всегда означает, что можно взять ещё одного пассажира: возможно, перевозчик уже занимает единственное разрешённое место.
Каждый рейс записывают как переход из одного состояния в другое. Отмечают, кто отправился, кто прибыл, кто остался на каждом берегу и где теперь лодка. Благодаря такой записи можно проверить весь план шаг за шагом, а не полагаться на память.
Затем отбрасывают ходы, которые сразу нарушают правила. Но этого недостаточно: допустимый сейчас рейс может завести в тупик, например оставить лодку на берегу, откуда её нельзя вернуть. Поэтому перед выбором стоит прикинуть, какие следующие действия останутся возможными.
Когда план найден, его проверяют целиком от начала до конца. Каждый рейс должен соответствовать вместимости лодки и правилам управления, а после каждого перехода состояние должно быть безопасным. В последнем состоянии все нужные участники должны оказаться на целевом берегу.
| Что проверяем | Вопрос для проверки | Как записать |
|---|---|---|
| Исходное состояние | Кто и где находится до первого рейса? | Список участников по берегам |
| Вместимость лодки | Кого можно перевезти за один рейс? | Число пассажиров в лодке |
| Положение лодки | На каком берегу лодка после рейса? | Берег отправления и берег прибытия |
| Ограничения | Не осталось ли запрещённое сочетание без перевозчика? | Отметка о выполнении каждого условия |
| Цель | Все ли участники оказались на нужном берегу? | Сравнение с условием задачи |
Заполняй такую проверку после каждого рейса, а не только в конце. Если хотя бы одно условие не выполнено, вернись к предыдущему состоянию и выбери другой ход. Так проще увидеть, на каком именно шаге план перестал работать.
Перевозчик должен перевезти на другой берег двух пассажиров по очереди. Лодка вмещает перевозчика и одного пассажира. По условию участники должны переправляться по одному, поэтому после первого пассажира перевозчик возвращается за вторым.
Проверим вместимость: в каждом рейсе плывёт перевозчик и не больше одного пассажира, а в обратном рейсе — только перевозчик. Значит, все переходы разрешены, и оба пассажира доставлены. Ответ: перевозчик с А переправляется, возвращается, затем переправляется с Б.
Перевозчик может взять в лодку только одного из троих. Без него волк съест козу, а коза — капусту. Поэтому опасно оставлять на берегу волка с козой или козу с капустой, если перевозчика там нет.
После каждого шага опасные пары либо разделены, либо рядом с ними находится перевозчик. Ответ: коза туда, перевозчик назад, волк туда, коза назад, капуста туда, перевозчик назад, коза туда.
В лодке помещается один взрослый или не более двух детей, а управлять лодкой умеют только взрослые. При буквальном чтении этих условий задача не имеет решения: взрослый не может находиться в лодке одновременно с детьми, а дети не умеют управлять ею сами.
Значит, ни один первый рейс не позволяет начать перевозку детей. Ответ: при данных правилах последовательности рейсов нет. Для решения условия нужно изменить, например разрешить взрослому плыть вместе с детьми или разрешить детям управлять лодкой.
Для решения переправ полезно уметь внимательно читать условие и выделять в нём цель, участников и ограничения. Это помогает отличить обязательное правило от подробности, которая не влияет на ход решения. Когда условия записаны точно, их легче проверять на каждом шаге.
Запись состояний и проверка переходов связаны с составлением алгоритмов: действие меняет исходное положение и приводит к новому. Такой способ рассуждения пригодится и в логических задачах, где важно не пропустить ни одного возможного хода и исключить запрещённые варианты.
С чего начать решение задачи о переправе?
Сначала назови цель: кого нужно перевезти и куда. Затем выпиши, кто управляет лодкой, сколько пассажиров она вмещает и какие сочетания нельзя оставлять без перевозчика.
Зачем записывать, кто остаётся на каждом берегу?
После рейса на берегу могут остаться участники, которых нельзя оставлять вместе. Запись помогает заметить это сразу и понять, можно ли выполнить следующий рейс.
Как понять, что после рейса возникло запрещённое состояние?
Сверь состав участников на каждом берегу с ограничениями из условия. Например, если волк и коза остались одни без перевозчика, состояние запрещено.
Почему в решении иногда нужно возвращать кого-то обратно?
Лодка может оказаться на берегу, откуда нужно забрать следующих участников. Тогда кто-то должен переправить её назад, причём обратный рейс тоже обязан соответствовать правилам.
Как проверить, что последовательность рейсов завершает задачу?
Пройди весь план от исходного положения: проверь пассажиров каждого рейса, вместимость лодки и состояние обоих берегов. В конце все нужные участники должны быть на целевом берегу, а запрещённых сочетаний не должно быть.
З Задачи о переправах