Нахождение кратчайшего пути между узлами с использованием переполнения стека Dijkstra’s и min heap

Это более общий вопрос. У меня есть карта, которая отображает название города и его узла (содержащую основную информацию, такую ​​как страна, широта, долгота и т. Д.). Каждый городской узел имеет массив ребер, указывающих на узлы назначения. У края есть время и стоимость участника. Я хотел бы найти кратчайшее время для перемещения между двумя узлами, но я начал путать себя с лучшим способом сделать это.

Я создал собственный класс min heap, основанный на векторе городских узлов. Я могу создать карту, добавить узлы города с карты в кучу мин. Я написал алгоритм Дейкстры, чтобы найти кратчайший путь, и он работает для некоторых путей, но не для всех. я верить это потому, что когда я обновляю вес городского узла для алгоритма Дейкстры, куча не сортируется правильно.

Как я обновляю вес узла, как я должен повторно накапливать кучу так, чтобы наименьший вес был наверху?

Спасибо!

0

Решение

Если вы хотите отсортировать всю кучу, то взгляните на
http://en.wikipedia.org/wiki/Heapsort

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

http://en.wikipedia.org/wiki/Binary_heap

Их немного сложно описать здесь, но пузыри кучи вверх / вниз гарантируют, что ваша куча организована правильно. Стоит также отметить, что в худшем случае heapsort будет работать на O (n log n), в то время как для большинства операций используется O (log n).

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector