E. Сапер
Ограничения: время – 2s/4s, память – 64MiB Ввод: input.txt или стандартный ввод Вывод: output.txt или стандартный вывод
Послать решение Blockly Посылки Темы Где Обсудить (0)
Мальчику Васе очень нравится известная игра "Сапер".
В нее играет один человек. Игра идет на клетчатом поле
размером `m\ times\ n` (`m` строк, `n` столбцов).
В некоторых клетках поля стоят мины. В каждой из остальных клеток записано либо число
от 1 до 8 — количество мин в соседних с ней клетках,
либо ничего не написано — это означает, что в соседних клетках мин
нет. Клетки являются соседними, если они имеют хотя бы одну общую вершину.
В одной клетке не может стоять более одной мины.
Будем называть поле с расположенными на нем минами и числами картой.
Изначально все клетки поля
закрыты. Игрок за один ход может открыть какую-нибудь клетку. После этого игроку
показывается содержимое этой клетки, и если в
открытой им клетке оказывается мина, он проигрывает.
В противном случае игра продолжается. Цель
игры — открыть все клетки, в которых нет мин.
У Васи на компьютере есть эта игра, но ему кажется, что все карты, которые в
ней есть, некрасивые и неинтересные. Поэтому он решил нарисовать свои. При
этом он хочет, чтобы карты, которые он нарисует, после того, как они будут
открыты, выглядели красиво.
У Васи есть рисунки, нарисованные на клетчатой бумаге следующим образом:
некоторые клетки закрашены в черный цвет, а некоторые оставлены белыми. Вася
хочет по каждому такому рисунку сделать соответствующее ему поле для игры в
"Сапера" по следующему правилу: если на рисунке клетка покрашена в черный
цвет, то на этом месте должна быть либо мина, либо число от 1 до 8, если же
клетка оставлена белой, то на игровом поле она должна быть пустой.
Напишите программу, которая сделает это за Васю.
Ввод
В первой строке входного файла содержатся числа `m` и `n` (`1\ ≤\ m,\ n\ ≤\ 100`)
— количество строк и столбцов соответственно. Далее идет таблица
из `m` строк, по `n` чисел в каждой строке, задающая Васин рисунок.
Каждое число в таблице равно 0 или 1, число 0 означает, что соответствующая клетка на
рисунке белая, 1 — черная. Числа в строках разделяются пробелами.
Вывод
Выходной файл должен содержать `m` строк по `n` символов — карту игрового поля,
`j`-ый символ `i`-ой строки должен содержать символ "*" (звездочка) если в клетке
`(i,j)` стоит мина, цифру от 1 до 8, если в этой клетке стоит соответствующее
число, либо "." (точка), если клетка `(i,j)` пустая. Символы пробелами
не разделяйте.
Если построить поле, соответствующее рисунку, невозможно, выходной файл
должен содержать одну строку с сообщением "No solution".
Пример ввода 1
3 4
0 1 1 1
1 1 1 1
1 1 0 0
Пример вывода 1
.1*1
1211
*1..
Пример ввода 2
3 3
0 1 0
1 0 1
0 1 0
Пример вывода 2
No solution
Источник: XII командный чемпионат школьников Санкт-Петербурга по программированию.