М684. Задача о новом варианте морского боя

Условие

Двое играют в следующий вариант «морского боя». Один игрок располагает на доске n×n некоторое количество непересекающихся «кораблей» n×1 (быть может, ни одного). Второй игрок наносит одновременно ряд ударов по полям доски и про каждое поле получает от противника ответ — попал или промахнулся. По какому минимальному количеству полей следует нанести удары, чтобы по ответам противника можно было однозначно определить расположение всех его кораблей? Рассмотрите три случая: а) n=4, б) n=10, в) n — любое натуральное число.

Решение

Как показывают письма читателей, формулировка задачи допускает два одинаково осмысленных толкования — в зависимости от того, какие корабли считать «непересекающимися» (1) те, которые не имеют общих клеток; (2) те, которые вообще не имеют общих точек, даже граничных — как это принято в обычной игре «морской бой», в которую все мы играли в детстве. Обе задачи получились довольно интересными, хотя (1), пожалуй, попроще. С нее мы и начнем.

(1) Пусть корабли заполняют произвольное множество K из нескольких горизонталей или вертикалей доски n×n; мы должны указать множество A из возможно меньшего числа клеток такое, что пересечение AK однозначно определяет множество K. (Заметим, что если кораблей n, то они занимают все клетки доски, и мы, разумеется, никак не сможем узнать, горизонтальные корабли или вертикальные.)

Легко указать множество A из 2n1 клеток, удары по которым позволяют найти любое K (пример для n=10 приведен на рисунке 1). С другой стороны, 2n2 клеток заведомо недостаточно. Это следует из того, что любое множество A из 2n2 доски n×n можно разбить на два непустых подмножества B и C, так, что ни одна из вертикалей и ни одна из горизонталей, пересекающихся с B, не пересекающихся с C (тогда, если ответ «попал!» будет в точности на B, мы не сможем узнать, горизонтальные корабли или вертикальные). Докажем это.

Сопоставим каждой горизонтали красную, а каждой вертикали — синюю точку (вершину графа) и для каждой клетки множества A (на рисунке 2 они обозначены звездочками) соединим ребром пару точек, соответствующую ее вертикали и горизонтали (рис. 2). Мы получим граф с 2n вершинами и 2n2 ребрами. Такой граф не может быть связным (см. «Квант». 1981. №6. с. 10) — он обязательно распадается на два или больше отдельных кусков. Ребра одного из связных кусков можно принять за множество B (см. рис. 2), остальные — за множество C. (Разумеется, это рассуждение можно изложить и не пользуясь терминологией теории графов.) Итак, в случае (1) ответ: 2n1.

(2) Пусть корабли не имеют общих точек. Докажем, что в этом случае необходимое количество a ударов — клеток в множестве A — не меньше 4n3. При этом будут использованы только такие свойства множества A: в каждой горизонтали и вертикали встречается хотя бы одна клетка множества A, и для любой клетки множества A в ее горизонтали или вертикали есть еще хотя бы одна клетка A.

Расставим в клетках множества A синие и красные единицы и двойка так: на каждой горизонтали, где клеток A более одной, запишем в каждую из них красную 1, а где лишь одна клетка — запишем в нее красную 2; точно так же на каждой вертикали запишем в клетке множества A синие 1 и 2 (рис. 3). Поскольку в каждой клетке множества A стоят либо единица и двойка, либо две единицы, сумма s всех написанных чисел не больше 3a. Поскольку на каждой линии (горизонтали и вертикали) мы записали числа с суммой не меньше 2, s4n. Поэтому as/34n/3.

На рисунке 4 показано, как можно направить требуемым образом 4 удара на доске 3×3 (n=3). Используя этот «блок» 3×3, можно построить пример направления a ударов, где a — наименьшее целое число, для которого a4n3 (примеры для n=4, n=8 и n=10 показаны на рисунках 35).

Итак, в этом случае ответ: [4n+23], то есть для n=3k, n=3k+1 и n=3k+2 нужно соответственно 4k, 4k+2 и 4k+3 ударов.

Н.Васильев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *