powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров
25 сообщений из 421, страница 3 из 17
Задачка про остров
    #39924919
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имя пользователя1
iOracleDev
пропущено...

Обход по какому правилу? По правилу поиска выхода из лабиринта?
обход, например, "поиском в ширину" - закрасили клетку, добавили в очередь тех соседей, которых тоже закрасим.
вот здесь примерно так по соседним клеткам идет закраска - https://ru.wikipedia.org/wiki/Алгоритм_Ли
...
Рейтинг: 0 / 0
Задачка про остров
    #39924921
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
На словах , на первый взгляд должно работать. А вот с реализацией мне кажется наплачетесь. Ветвистые деревья придется отрабатывать.
кто бы спорил)
всё время так - идея норм., в реализации костыли и подпорки
...
Рейтинг: 0 / 0
Задачка про остров
    #39924922
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому слезно прошу - посмотрите на мой вариант.
Алгоритм один послойный. Тупой как пробка. Самое сложное - найти таки эти окружности, что опять же решается в двумерном пространстве.
На каждую лужу - заряжаем опять ровно этот же алгоритм в рекурсии, пока не дойдем до вариант - что луж в остатке нет.

Я же не просто так написал, закрашивание оно игтуитивно понятно было с самого начала.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924923
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник,

А чего на него смотреть? mayton кодить хочет постоянно, предложи ему реализовать все три алгоритма и сравнить))
...
Рейтинг: 0 / 0
Задачка про остров
    #39924925
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник,

ну вот, например, кейс - где-то посреди острова несколько смежных ячеек 5, окруженных 6-ками и 7-ками. Нашли эту лужу, записали объем, залили цементом. Дальше снова ищем лужи?
...
Рейтинг: 0 / 0
Задачка про остров
    #39924927
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мой вариант, если выгорит, то тянет на O(N) по вспомогательной памяти - закраска, очередь для поиска и т.д., - и где-то O(5N) по времени - каждую клетку отрабатываем один раз, ничего не ищем.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924937
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автору вот, например, кейс - где-то посреди острова несколько смежных ячеек 5, окруженных 6-ками и 7-ками. Нашли эту лужу, записали объем, залили цементом. Дальше снова ищем лужи?

Да не так же.

Вы прошли слоями сверху 1 раз. У вас после этого прохода остались скажем 10 луж.
Вам надо натравить данный алгоритм на каждую из луж, просто чтобы убедиться, что нет такого что лужа в луже. Пример лужи в луже с кольцевым островком:5393935. Для такого крайнего случая чуть усложнятся вычисления объема.

Ну как карты рисуют с высотами, умозрительно срезают слои и сразу видно - здесь пустота здесь земля.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924940
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Задачка про остров
    #39924944
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
Вы прошли слоями сверху 1 раз.
вот это не совсем понял
...
Рейтинг: 0 / 0
Задачка про остров
    #39924949
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну сверху в низ вы идете.
Грубо у вас скажем набор высот хексов такой

5 7 8 9.

Тут получается что есть по уровням для нарезки 4 слоя + нуль (море).

На первом слое вы получите двухмерный срез (смотреть сверху на остров). Там будет только один хекс к пример (вершина).
Следующий слой - 8. Там уже будет другая картинка на срезе. И так далее.
Каждый срез надо посмотреть на наличие замкнутых фигур внутри среза (дырка в бублике или подобное). Дырка в бублике - лужа. Ее выкидываем из последующего расмсотрения (т.е. уменьшаем количество хексов для анализа).

Представьте что вы смотрите сверху 2 горы, одна простая , вторая вулкан с жерлом.
Если срезать по слою то получится что -то типа картинки внизу.

Я уже не знаю как еще объяснить.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924951
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По этой картинке вы на третем шагу вычислите одну лужу (жерло вулкана). Если бы это был не замкнутый контур, то овала внутреннего не было бы. Был бы надгрызенный бублик (прогрызенный до дырки) Типа так
...
Рейтинг: 0 / 0
Задачка про остров
    #39924952
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде как исходные данные.

Код: sql
1.
2.
3.
4.
5.
    1 4 3
  1 5 1 5
2 3 2 4 6
2 6 4 2
3 1 2
...
Рейтинг: 0 / 0
Задачка про остров
    #39924953
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
Грубо у вас скажем набор высот хексов такой

5 7 8 9.
если что, выбор высот может быть охренительный, сравнимый с количеством ячеек
...
Рейтинг: 0 / 0
Задачка про остров
    #39924955
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вроде как исходные данные.

Код: sql
1.
2.
3.
4.
5.
    1 4 3
  1 5 1 5
2 3 2 4 6
2 6 4 2
3 1 2

да, как вариант. Слева сверху нулями забить, например

тогда соседние ячейки как раз 22076725
...
Рейтинг: 0 / 0
Задачка про остров
    #39924956
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторесли что, выбор высот может быть охренительный, сравнимый с количеством ячеек
может быть не спорю. Только как это принципиально отличается от слоев в вашем случае?

В частности в моем - на каждой итерации уменьшение требуемых обсчетов. И для большинства островов не из фантастики - вполне себе разумно распределяет нагрузку.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924957
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В исходных данных мой алгоритм найдет дырку на 5ом слое.

Код: c#
1.
2.
3.
4.
5.
    1 x x
  1 x 1 x
x x x x x
x x x x
x 1 x


Тут как раз возвращаемся к слабому месту в моем варианте - как эти кольца выявлять.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924958
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем закругляясь на сегодня - и Ваш алгоритм вполне себе работоспособен, так же будете крестиками слои закрашивать, ну вернее не слои, и то, куда вода с моря при поднятии постепенном заливается.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924960
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
В исходных данных мой алгоритм найдет дырку на 5ом слое.

Код: c#
1.
2.
3.
4.
5.
  1 x x
 1 x 1 x
x x x x x
 x x x x
  x 1 x



если я правильно понял, то эту дырку выявить на слое, высота которого равна 1, и он срезает всё, кроме 1.

но должен быть ещё предыдущий слой высотой 2, который выявит такое:
Код: c#
1.
2.
3.
4.
5.
  1 x x
 1 x 1 x
2 x 2 x x
 2 x x 2
  x 1 2


тут у нас бассейн площадью 2, объемом 2 ,

потому что до этого шел слой высотой 3, который сделал так
Код: c#
1.
2.
3.
4.
5.
  1 x 3
 1 x 1 x
2 3 2 x x
 2 x x 2
  3 1 2


но тут, и в слоях выше, замкнутых озер не было.

итого сколько разных высот, столько и слоёв, правильно?
...
Рейтинг: 0 / 0
Задачка про остров
    #39924961
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
АСУ ТПшник,

А чего на него смотреть? mayton кодить хочет постоянно, предложи ему реализовать все три алгоритма и сравнить))

Нет уж. Я не такой всеядный.

Позвольте мне все таки самому выбирать что кодить.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924963
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник,

в общем, если при переходе к очередному слою быстро вычислять замкнутые контуры (их площади), то вполне жизненно. Пока не совсем понимаю, как это делать.

ну и предварительно надо обойти весь массив ячеек, для каждого слоя наколбасить коллекцию ячеек, которые будут закрашиваться.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924964
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторно должен быть ещё предыдущий слой высотой 2, который выявит такое
Да все праваильно я упустил, что там тоже 2-ка окружена.
А так да - вы правильно ход моих мыслей поняли.
Выявится дыра окруженная x состоящая из двух клеток 1 и 2
Код: c#
1.
2.
3.
4.
5.
    1 4 3
  1 5 1 5
2 3 2 4 6
2 6 4 2
3 1 2


А на последующей итерации этот кусок уже вывалится из анализа, т.е. он не будет анализировать единичку во второй строке.
После прохождения по слоям у вас получится что есть одна лужа.
Как ее объем вычислить - разговор отдельный, но вы легко можете тупо почитать вес каждого хекса в данной луже.

Но предположим что что-то сложное в луже.

/\/\
/\/ \/\
/ \

Натравите алгоритм на сию лужу, представив что это такой остров в море (рекурсия). Алгоритм выделит опять лужу.
Т.е. в первом проходе выделится слой
/\* что между ними пока непонятно* /\
А после рекурсии на этом "новом острове"вы увидите
/\/\
...
Рейтинг: 0 / 0
Задачка про остров
    #39924966
АСУ ТПшник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще имхо ваш пример как раз лучше решается вашим способом, но реализация не наглядна и не очевидна будет (куча массиов, подмассивов и так далее).
Но вот на больших площадях мой ИМХО нагляднее.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924968
Фотография Имя пользователя1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АСУ ТПшник
Но предположим что что-то сложное в луже.

Код: plaintext
1.
2.
3.
    /\/\
 /\/    \/\
/          \


тут самый верхний слой дает маленькую лужу, второй слой даёт большую лужу с островом (если это гора с симметрией вокруг центра).

и вот опять же, как быстро считать площади дырок на каждом срезе.


ну а мой вариант закрасит внешнюю стену, потом большую лужу и с неё доберется до внутренней горы, которую тоже закрасит, и озеро вверху. Как раз та самая рекурсия.
...
Рейтинг: 0 / 0
Задачка про остров
    #39924978
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы еще попробовал классифицировать острова по виду рельефа.
- шумящие (решаем только методом грубой силы)
- террасы (классифицируем близкие поверхности (плато)) и рассматриваем как 1 узел высоты вершины графа.
- лабиринты (где вода физическая может вытекать достаточно долго. Можно попробовать алгоритм "Волны").
...
Рейтинг: 0 / 0
Задачка про остров
    #39924979
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорян. Не смог приаттачить сразу под кат.
...
Рейтинг: 0 / 0
25 сообщений из 421, страница 3 из 17
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]