За последние 24 часа нас посетили 18595 программистов и 1614 роботов. Сейчас ищет 1801 программист ...

Задачка по программированию

Тема в разделе "Прочее", создана пользователем basist, 28 июл 2007.

  1. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    есть матрица. в ней каждый элемент предстовляет элемент поля (ну, например, лист в клеточку (не очень хорошо выразился, понимаю :) )) прямоугольником считается одна закрашенная клеточка (1х1), 4 закрашенных клеточки (2х2), 6 (3х2) и т.д. но все клетки внутри прямоугольника должны быть закрашены, т.е. элементы матрицы являющиеся сторонами прямоугольника либо его внутренней частью = 1, остальные = 0. минимальное расстояние между прямоугольниками - 1 клетка.

    вопрос: как посчитать количество прямоугольников?
    у кого какие предложения?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Это тебе надо на форум математиков :)
     
  3. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    математикам нужны входные параметры сразу. чтобы тупо посчитать и всё)))
     
  4. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    насколько большая матрица?
     
  5. Anonymous

    Anonymous Guest

    stas_t, N x N, это ж очевидно. ;)
     
  6. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    Горбунов Олег
    а, ну тогда, наверно, так: просматриваем каждую клетку. если она закрашена И клетка сверху не закрашена И клетка слева не закрашена, то мы находимся в вершине очередного прямоугольника. $прямоугольников+=1. какую проверку разместить в начале -- зависит от преобладающей формы прямоугольников.
     
  7. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    basist
    Это типичная алгоритмическая задача. Ее нужно сначала решить в уме, а потом уже реализовать решение на PHP (или другом языке программирования). Если тебе нужна помощь в первой части - то это не тот форум, хотя можем попытаться помочь ;) но сначала надо условие уточнить. Сколько прямоугольников в таком фрагменте?

    Код (Text):
    1. ..x..
    2. .xxx.
    3. xxxxx
     
  8. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Видимо ноль.
     
  9. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Если таких вариантов по условию не должно быть - тогда решение Стаса годится (проверки на края матрицы только надо не забыть).
     
  10. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    края матрицы, кстати, неважны, потому как в пхп условие $arr[-1][3] никогда не вернёт true... хотя нотис гарантирован... решайте сами. если матрица большая, то оптимальнее отключить нотисы, чем добавлять две дополнительные проверки на каждую клетку
     
  11. basist

    basist Активный пользователь

    С нами с:
    7 июл 2007
    Сообщения:
    388
    Симпатии:
    0
    Адрес:
    Орел
    stas_t, Вы гений)))) Спасибо!

    а почему не M x N ?? где M != N
     
  12. stas_t

    stas_t Активный пользователь

    С нами с:
    24 апр 2007
    Сообщения:
    500
    Симпатии:
    0
    Адрес:
    Courbevoie, France
    не надо смеяться, это правда :)