Кратчайший путь

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Кратчайший путь

Сообщение Tin » 18.10.2004 (Пн) 9:38

Драсьте... Такое дело - нужен ХОРОШИЙ алгоритм нахождения кротчайшего пути в 8 направелниях... Впринципе - не обязательно кротчайшего, но что бы прямых было побольше... Расмотрю любые варианты...
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 18.10.2004 (Пн) 10:41

Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.10.2004 (Пн) 11:01

Волна в реализации VB не самое хорошее решение, тормозить будет. Разве что с основательной оптимизацией.
Lasciate ogni speranza, voi ch'entrate.

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 19.10.2004 (Вт) 6:28

Волна действительно тормозит...
Есть ещё идеи?
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.10.2004 (Вт) 17:40

Tin писал(а):Волна действительно тормозит...
Есть ещё идеи?
А ты попробовал её, или заранее знаешь, что она тормозит? ;-)

Вообще, все алгоритмы тут: http://algolist.manual.ru/maths/graphs/shortpath/
Изображение

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 20.10.2004 (Ср) 6:31

Волну пробовал - не понравилось, а оптимайзить сложно - намудрено сильно
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 20.10.2004 (Ср) 16:17

Раз уж такая тема... Кто-нибудь знает, какой алгоритм применить к объекту с постоянно меняющимися координатами?
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 20.10.2004 (Ср) 17:12

Можно попробовать алгоритм с возвратом, смесел следующий:
Код: Выделить всё
sub Paint(L, x, y: integer);
a(y,x) = L
if ( <(x,y) — целевая точка> ) then exit
if (<можно пройти направо>) then Paint(L+1, x+1, y);
if (<можно пройти налево>) then Paint(L+1, x-1, y);
if (<можно пройти вверх>) then Paint(L+1, x, y-1);
if (<можно пройти вниз>) then Paint(L+1, x, y+1);
end sub


Например можно пройти направо:
Код: Выделить всё
если (a(x+1,y)=0) или (a(x+1,y)>a(x,y)+1)

У меня на таком алгоритме игрушка реализована

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.10.2004 (Ср) 17:15

Это поиск в глубину.
Им путь найдётся не кратчайший, а произвольный.
Изображение

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 21.10.2004 (Чт) 6:32

А есть у когонить уже нормально реализованый алгоритм? Киньте исходы - посмотрим.

Я сталкиваюсь с основной проблемой - путь действительно находится кротчайший, НО персонаж уж сильно веляет - т.е. персонаж двигается в 8 направлениях и он должен двигатся толкьо по прямой или по диагонали в 45 градусов...
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

Sirik
Perspicaz
Perspicaz
Аватара пользователя
 
Сообщения: 2280
Зарегистрирован: 19.02.2004 (Чт) 16:09
Откуда: Бердичев, Украина

Сообщение Sirik » 21.10.2004 (Чт) 8:08

tyomitch писал(а):Это поиск в глубину.
Им путь найдётся не кратчайший, а произвольный.

А ты его пробовал? Наверное нет.

Посмотри условие a(x+1,y)>a(x,y)+1.

Поэтому и находится кратчайший путь (Линии тоже на этом алгоритме, и Atomica тоже)

YB
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 21.10.2004 (Чт) 7:17
Откуда: Н.Новгород

Сообщение YB » 21.10.2004 (Чт) 9:20

Я так понимаю, что тебе необходимо построить ориентированный граф, где есть набор узлов, соединённых рёбрами и найти кратчайший маршрут. Есть замечательная книга "Готовые алгоритмы на Visual Basic", где всё расписано. Всё в Exam_rar.exe. Разбирайся!!! :lol:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 21.10.2004 (Чт) 9:52

Sirik писал(а):
tyomitch писал(а):Это поиск в глубину.
Им путь найдётся не кратчайший, а произвольный.

А ты его пробовал? Наверное нет.

Ага, сорри. Спутал :oops:
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

    TopList