Страница: 1 | 2 |
Вопрос: алгоритм заливки
Добавлено: 06.02.09 11:36
Автор вопроса:
Ответы
Всего ответов: 24
Номер ответа: 16
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #16
Добавлено: 14.02.09 16:28
Наверно, ты имел ввиду BFS, частный случай которого называется волновым алгоритмом.
Номер ответа: 17
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #17
Добавлено: 14.02.09 16:39
да, именно о волновом алгоритме я и говорил
Номер ответа: 18
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #18
Добавлено: 15.02.09 02:22
вот,кстати, разжованная реализация нескольких вариантов этого алгоритма
http://student.kuleuven.be/~m0216922/CG/floodfill.html
Номер ответа: 19
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #19
Добавлено: 15.02.09 05:57
EROS, жаль что ты не привел нам свой пример алгоритма с рекурсией, я хотел посмотреть как у тебя это реализовано
Номер ответа: 20
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #20
Добавлено: 16.02.09 13:19
Без рекурсии.. ибо может случиться непоправимое
Тем не менее, я не предлагаю юзать готовый алгоритм поиска пути, я лишь даю его за основу, чтобы дать направление подумать.
Номер ответа: 21
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #21
Добавлено: 16.02.09 13:24
разумеется, на больших картинках это не прокатит.. StackOverflowException обеспечен.
Номер ответа: 22
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #22
Добавлено: 16.02.09 17:27
О да. именно поэтому я ну очень не люблю заставлять программу входить саму в себя
А то, что я имел ввиду, довольно просто -
Имеем два списка - один "белый", второй "черный"
1. берем начальную точку, добавляем ее в белый список.
2. мочим цикл по белому списку, пока он не исчезнет
3. оглядываем соседние 8 каждой точки белого с целью узнать, если ли какая-нибудь из них в черном списке. если нету - добавляем в белый.
4. текущую же точку убиваем из белого, и пихаем в черный.
ну, вродь корректно
Номер ответа: 23
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #23
Добавлено: 16.02.09 18:51
С точки зрения расхода памяти удобнее иметь три списка: перебиравшихся на прошлом шаге; перебирающихся на этом; которые будут перебираться на следующем.
Номер ответа: 24
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #24
Добавлено: 16.02.09 18:58
AgentFire Если я тебя правильно понял, то на более-менее небольшой картинке ты получишь переполнение стека.
http://www.codeproject.com/KB/GDI-plus/QuickFillNET.aspx
Вот тут говорят неплохая реализация, сам правда бегло смотрел