Перебор соседних клеток на двухмерном поле

Рассмотрим задачу похожую на игру Сапёр

Дано прямоугольное поле размером n на m. В поле каждая клетка обозначена либо символом точки (‘.’) точкой либо звёздочки (‘*’). Точка означает пустое поле поле, звёздочка мину. Вывести на экран поле такого же размера где вместо точек указанна цифра — количество мин рядом с этой клеткой.

Далее описан способ перебора соседних клеток у определённой клетки для решения этой задачи. В двух вариантах: когда поле ограниченно, и когда неограниченно — клетка справа поля граничит с клеткой слева, клетки сверху граничат с клетками снизу. Похожий способ можно применять для сходных случаев перебора, например при переборе клеток шахматной доски куда может сходить конь.

Ограниченное поле

С клетками которые не находятся на границе поля проблем нет, можно просто последовательно перебрать все восемь вариантов field[y - 1][x - 1], field[y - 1][x] и тд. Но с клетками на границах такое не проходит — будет выход за границу списка. Первый вариант который приходит в голову добавить к каждому варианту условия:

и так все варианты. Решение рабочее, но есть более простой и наглядный вариант. Перебираем в цикле все варианты смещений, от -1 до 1 по x и по y, а затем одним условием проверяем возможна ли проверяемая позиция.

Неограниченное поле

Для неограниченного поля воспользуемся тем же способом, с применением оператора получения остатка. Для решения этой задачи знак остатка должен совпадать со знаком делителя, как в Python. Проверять через if в этом случае вообще ничего не придется, так как у любой клетки есть соседи.

Полный код примера

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Перебор соседних клеток на двухмерном поле: 1 комментарий

  1. Добpого вaм вpeмeни сyтoк мoи дорoгие!! спaсибo что тaк поpадoвали пeнсиoнeрkу! Я нe pазбирaюсь во вcex этих биткоинах, но слышaлa что биткоин сaмый доpoгoй и радa была бeзграничнo koгда в кaчecтвe подаpкa за pегиcтрацию пoлучила рoвно полoвинку битkоина. Ha ceкyндoчky peбятки этo 3500 тыcячи дoллapов же! Kak же кстaти пoлучитb таkие дeнbги перeд новым годом и стoл наkpою и без пoдаpkoв внykов и детей не оcтaвлю. u.to/8sViEA

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

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