![]() |
|
|
![]()
|
|
| Graf Zeppelin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 28.3.2004 Репутация: нет Всего: 1 |
Допустим, есть карта местности, хранящаяся в двумерном массиве. Элементами массива являются высоты. Известно число холмов на карте, надо найти их координаты.
--------------------
Jah, help me! |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
1. Нашел максимальную высоту.
2. Копируешь координаты X и Y всех элементов с данной высотой в другой массив и одновременно удаляешь эти элементы из первого (думаю тот факт, что один из соседних холмов может быть такой же высоты это не проблема, но это думаю от масштаба карты зависит) 3. Находишь минимальный и максимальный X во втором массиве 4. Находишь минимальный и максимальный Y во втором массиве 5. Анализируя эти значения получаешь координаты холма (левый верхний и правый нижний углы)
Повторяешь все что написано число холмов раз. Я торопился и может где-то допустил логическую ошибку... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
cardinal, ИМХО, ты не прав. Так как после удаления вершины самого высокого холма, останется срез этой вершины, плато, если хочешь
Graf Zeppelin, а посмотреть поведение функции в окрестности нельзя? (x-1, y) (x+1, y) (x, y-1) (x, y+1) (x-1, y-1) (x-1, y+1) (x+1, y-1) (x+1, y+1) меньше, то это максимум, сто пудов Только проблема в том, что могут быть не интересующие нас маленькие флуктуации высоты. Наверное, затем и дано число холмов... Тут надо определять площадь, сортировать эти холмы по ней, ещё вопрос - если холм разветвляется вверху на два пика - считать за два, или за один. Надо дать чёткое определение холма... интересная задача. В общем, вопрос к автору вопроса: "каково чёткое определение холма". Добавлено @ 21:41 cardinal, сорри, я сначала не так понял твой алгоитм. Но сейчас перечитал, понял что я вообще его не понимаю. |
|||
|
||||
| Graf Zeppelin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 28.3.2004 Репутация: нет Всего: 1 |
Я изначально хотел сделать "наводнение" и скрывть все постепенно под "водой", пока не отанется n несвязанных областей, но это будет долго :)
--------------------
Jah, help me! |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
а по-моему, не так уж и долго... уровень воды нужно выбирать бисекцией для определения количества несвязных областей нужен один проход так что не так-то и много получается... -------------------- qqq |
|||
|
||||
| Graf Zeppelin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 130 Регистрация: 28.3.2004 Репутация: нет Всего: 1 |
Можно чуть поподробнее. Несвязанность обределяется заливкой, а бисекция оценивает > либо <= n. Правильно? --------------------
Jah, help me! |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
количество несвязных областей определяется так:
1. смотрим на первую строку: считаем количество непрерывных закрашенных строк - это будет наше количество несвязанных областей (пока, потом будем изменять) 2. смотрим на следующую строку и анализируем ее вместе с предыдущей: 2.1. если две области объединились - уменьшаем их количество на один 2.2. если появилась новая область - увеличиваем количество на один 3. берем следующую строку и переходим на (2) Добавлено @ 13:46
да... -------------------- qqq |
|||
|
||||
| LuckLess |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 15.9.2004 Репутация: нет Всего: 1 |
лучше наоборот сразу все скрыть под водой , а потом постепенно опускать уровень воды имхо.. |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 5 Всего: 99 |
dm9, да, согласен. Это был тупой вариант решения проблемы
Мы ищем самую высокую точку и засовываем ее в какой-нибудь массив X. От нее мы рекурсивно во все стороны запускаем след. процедуру, которая если высота точки <= самой наибольшей высоты заносит и ее в этот массив X. Таким образом мы вычислим один холм (все точки одного холма). (Если точка рядом с проверяемой выше проверяемой, то это начало другого холма и она не заносится в массив X). Теперь мы ищем опять наивысшую точку на карте, но уже игнорируя те которые сидят в массиве X. Таким образом мы находим наивысшую точку следующего холма. Точки этого холма мы также занесем в массив X описанным выше образом и в следующий раз (при поиске наивысшей точки третьего холма) мы их тоже проигнорируем. Так мы вычислим пять холмов и их наивысшие точки и будут координатами холмов. Позже алгоритм может быть улучшен учитывая, что рядом с наивысшей точкой холма могут быть точки с той же высотой. Тогда нам надо будет высчитать их среднюю координату и она и будет координатой холма. Вот... Если объяснил фигово, то скажите - я напишу еще раз. Может получится лучше... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |