Задача 2. «Прямоугольники»
На квадратном листе бумаги размера N*N нарисовано несколько прямоугольников, какждый прямоугольник состоит из клеток, различные прямоугольники не накладываются друг на друга, и не соприкасаются. Дана целочисленная квадратная матрица N*N, в которой элемент равен 0 если он не принадлежит прямоугольнику, и отличенот 0 в противном случае. Определите число прямоугольников.
Формат входных данных:
В первой строке указывается размерность массива. Далее идет сам массив в котором «#» обозначают прямоугольники, а «0» остальные клетки.
Формат выходных данных:
Число прямоугольников.
Пример файла входных данных:
12
0 0 0 0 0 0 0 0 0 0 0 0
0 # # 0 # # # 0 0 # # #
0 # # 0 # # # 0 0 # # #
0 # # 0 # # # 0 0 # # #
0 # # 0 # # # 0 0 # # #
0 # # 0 0 0 0 0 0 # # #
0 0 0 0 0 0 0 0 0 # # #
0 # # # 0 # # # 0 0 0 0
0 # # # 0 # # # 0 # # 0
0 # # # 0 0 0 0 0 # # 0
0 0 0 0 0 0 0 0 0 # # 0
0 0 0 0 0 0 0 0 0 0 0 0
Пример выхода:
6
За задачу давали 50 очков поэтому я решал её первой. Алгоритм достаточно банален но много писанины в коде:
Бежим по матрице слева направо, сверху вниз. Находим первое препятсвие. Увеличиваем счетчик прямоугольников. Зануляем прямоугольник. Проверяем не вся ли матрица в 0, если нет то продолжаем сначала.
Все написал, но когда уже ушел вспомнил, что можно было бежать не сначала каждый раз, а стого места где остановился. Конечно когда матрица маленькая это не страшно, но если их делать по мегабайту то это может иметь нехорошие последствия. Но самое смешное, что я забыл вызвать free() в самом конце Т_Т. Но задача решена на 100% если не считать недочетов.
еще пара таких постов, и расфрэндячу нах.
пиши такую муть в умное комьюнити, а если такоего еще нет, то создай.
успехов.
Какие мы злые ^_^
отнюдь.
сегодня я очень даже в духе.
несмотря на плохой день.
Я больше не буду, сорри …..
ага! испуга-а-ался!
то-то же.