Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2009, 16:50   #1
PAVEL315
Форумчанин Подтвердите свой е-майл
 
Аватар для PAVEL315
 
Регистрация: 18.11.2006
Сообщений: 172
По умолчанию Алгоритм прохождения лабиринта

Можете подсказать алгоритм прохождения лабиринта из точки А в точку В при учёте того, что точка Б постоянно перемещается?
Достаточно лишь "увидеть" вторую точку - это будет конец.
Пример лабиринта в приложении.
"Спаун" происходит в углах - верхнем левом и правом нижнем.

Два варианта:
1) Точка В перемещается рандомно
2) Точка В пытается убежать от точки А

Точки видят друг друга.

Подскажите пожалуйста
Изображения
Тип файла: bmp 1.bmp (594.2 Кб, 192 просмотров)
дык!

Последний раз редактировалось PAVEL315; 28.12.2009 в 17:25.
PAVEL315 вне форума Ответить с цитированием
Старый 28.12.2009, 19:36   #2
Миша
Пользователь
 
Регистрация: 13.09.2007
Сообщений: 63
По умолчанию

Не знаю смогу ли тебе помочь но думаю что это делается так:
Сначала сохраняешь линии своего лабиринта в массиве:
Код:
var
a:array of array of Integer;
begin
// задаем размерность
SetLength(a,200,2);//где 200 количество линей
//Наполняем массив
a[1,1]:=1;//координата по Х
a[1,2]:=2;//координата по У
      Form1.Canvas.Pixels[X,Y]=clBlack then
{ ... }
end;
Рисуешь на Form1.Canvas свой лабиринт. Лучше это делать в событие главной формы OnPaint
Код:
Image1.Canvas.MoveTo(a[1,1],a[1,2]);
Image1.Canvas.LineTo(a[2,1],a[2,2]);
Потом с помощью математических формул перемещаешь свою точку. И при столкновении её с линией не допускаешь перехода её то есть if Form1.Canvas.Pixels[X,Y]=clBlack then …
Миша вне форума Ответить с цитированием
Старый 28.12.2009, 21:42   #3
PAVEL315
Форумчанин Подтвердите свой е-майл
 
Аватар для PAVEL315
 
Регистрация: 18.11.2006
Сообщений: 172
По умолчанию

Видимо не понял меня)

Лабиринт уже есть в виде картинки, просто идёт проверка на линию - её переступить невозможно.

Мне нужен именно алгоритм ПОИСКА, а не графика.

Ну хотя через массив тоже можно.
Но интересует именно поиск.
дык!
PAVEL315 вне форума Ответить с цитированием
Старый 28.12.2009, 21:49   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Необходимо найти оптимальный путь от т. А в т. В. Как только т. В переместиться, ищем путь заново.
Как найти оптимальный путь в лабиринте - обсуждалось на форуме.
Arigato вне форума Ответить с цитированием
Старый 28.12.2009, 23:31   #5
PAVEL315
Форумчанин Подтвердите свой е-майл
 
Аватар для PAVEL315
 
Регистрация: 18.11.2006
Сообщений: 172
По умолчанию

Можно ткнуть пальцем в тему?
http://www.programmersforum.ru/showthread.php?t=10952
Тут аваст ловит троянчик
дык!
PAVEL315 вне форума Ответить с цитированием
Старый 29.12.2009, 00:18   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вам exe нужен?
мне кажется что вам сорцы оттуда нужны.
exe просто не трогайте(сотрите)
а Индюк описан в тут по соседству.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.12.2009, 12:35   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Цитата:
Сообщение от PAVEL315
Можно ткнуть пальцем в тему?
А Вам лень промотать страничку вниз и посмотреть раздел "Похожие темы"?
Arigato вне форума Ответить с цитированием
Старый 29.12.2009, 14:14   #8
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
По умолчанию

Оптимальный маршрут можно найти волновым алгоритмом к примеру.
k1r1ch вне форума Ответить с цитированием
Старый 30.12.2009, 20:12   #9
PAVEL315
Форумчанин Подтвердите свой е-майл
 
Аватар для PAVEL315
 
Регистрация: 18.11.2006
Сообщений: 172
По умолчанию

Волновой алгоритм наполовину реализован - но уже тут понятно, что дико всё тормозит, ибо поле 450х450 - а будут раз в 10 больше - простите, уже заполнение массива значением о каждой клетке занимает около 7 секунд - так ещё этот массив надо будет пролистать!
дык!
PAVEL315 вне форума Ответить с цитированием
Старый 31.12.2009, 00:04   #10
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Странно, от куда 7 секунд? 450*450 = 202500, такое должно быстро отработать.
Но, во-первых, не надо рассматривать лабиринт попиксельно. Можно взять более крупные куски, например, по 4*4 пикселя, если там есть стена - кусок не проходим, если нет - проходим.
Во-вторых, используйте не волновой алгоритм, а , к примеру, тот, что я приводил в этом посту: http://www.programmersforum.ru/showp...29&postcount=6
В данном случае при поиске пути просматриваются только те клетки, что находятся близко от оптимального пути. А если препятствий не много (судя по Вашему рисунку), так оптимальный путь будет найден практически сразу без рассмотрения других клеток (которые не находятся на оптимальном пути).
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПОМОГИТЕ напистаь прогу Построение Лабиринта vgovgo Помощь студентам 1 02.03.2009 22:37
Выход из лабиринта karamelka87 Общие вопросы C/C++ 9 27.01.2009 23:49
Поиск выхода из лабиринта! Входными параметрами являются лабиринт, заданный массивом A[n][n] Astor Помощь студентам 4 12.05.2008 16:45
Прохождение подземного лабиринта Джаффара МаксимNEWProgramm Паскаль, Turbo Pascal, PascalABC.NET 3 12.04.2008 19:52
Генерирование рандомного лабиринта Djaconda Паскаль, Turbo Pascal, PascalABC.NET 12 12.11.2007 19:00