Помощь - Поиск - Пользователи - Календарь
Полная версия: Поиск кратчайшего пути
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AlexPS
Вот такая у меня задача:

Задана матрица натуральных чисел А[1..n,1..m]. За каждый проход через клетку (i,j) взфмается штраф A[i,j]. Необходимо минимизировать штраф и пройти
из какой-либо клетки (i1,j1) в (i1,j1).

В FAQ я почитал про алгоритм дейкстры... А как бы мне перенести его на мою задачу? Сложность в том, что начальной и конечной точкой пути может быть абсолютно любая клетка матрицы.. huh.gif
mlc
Можно и волновым методом, только не 1-цу прибавлять а вес ячейки.
AlexPS
А можно поподробнее, что это за алгоритм... или где-нибудь пример можно посмотреть?
volvo
http://algolist.manual.ru/games/wavealg.php
или google.com
Archon
Алгоритм дейкстры, волновой метод... Зачем? Тут банальный перебор с некоторыми ограничениями. Следует использовать тот факт, что проходить через клетку повотрно - бессмысленно, так как в таком случае штраф явно будет НЕ минимальным. Попробуй рекурсию.
Malice
Цитата(Archon @ 25.07.05 21:35)
Алгоритм дейкстры, волновой метод... Зачем? ... Попробуй рекурсию.


Мне кажется, что волновым простенько получится.. А на счет повторного прохода ты как раз и не прав, более дешевый путь не обязательно самый короткий (могу пример привести, если что smile.gif ).
virt
Цитата
Мне кажется, что волновым простенько получится.. А на счет повторного прохода ты как раз и не прав, более дешевый путь не обязательно самый короткий (могу пример привести, если что  ).


но если в нем есть проход по одной клетке 2 раза ,то это не будет самым дешевым путем ,если из пути удалить клетки пройденные между этими двумя вхождениями на одну клетку ,то и длина пути и стоимость сократятся.

самый эффективный метод -- алгоритм дейкстры. Или метод предложенный mlc. Перебор при n+m > 15 не пройдет по времени.
Malice
Цитата(virt @ 26.07.05 7:40)
но если в нем есть проход по одной клетке 2 раза ,то это не будет самым дешевым путем...


Проход 2 раза имеется в виду в процессе поиску пути, а не в конечном варианте, конечно же smile.gif Просто в волновом алгоритме (классическом) значение в куждую клетку пишется 1 раз, а здесь возможен повторный проход. Поэтому, кстати, рекурсия в итоге выльется в полный перебор.
А может и вру, ни кто не хочет попробовать?
volvo
Цитата(Malice @ 26.07.05 11:48)
А может и вру, ни кто не хочет попробовать?

:no: Уже пробовал как-то, была подобная задача... Рекурсию делать не стоит, будет именно полный перебор, я все-таки остановился на алгоритме Дейкстры.
Archon
А если ограничить пребор прохождением по клетке 2-ой раз? Если клетка уже встречалась, берём следующий вариант. А алгоритм Дейкстры и волновой мне не понравились потому, что непреодолимых препятствий на карте нет и любой из этих алгоритмов в конечном счёте сведётся к тому же перебору. Завтра попробую написать, если получится, выложу.
Guest
Цитата(Archon @ 26.07.05 23:09)
А если ограничить пребор прохождением по клетке 2-ой раз?  Завтра попробую написать, если получится, выложу.


smile.gif Рекурсией попробуешь? Давай, буду ждать. Если на работе опять будет нечего делать, тоже попробую волну.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.