Задача 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% если не считать недочетов.

Categories: Без рубрики Tags:
  1. May 25th, 2004 at 06:35 | #1

    еще пара таких постов, и расфрэндячу нах.
    пиши такую муть в умное комьюнити, а если такоего еще нет, то создай.
    успехов.

    • May 25th, 2004 at 06:54 | #2

      Какие мы злые ^_^

      • May 25th, 2004 at 07:11 | #3

        отнюдь.
        сегодня я очень даже в духе.
        несмотря на плохой день.

  1. No trackbacks yet.