Поиск кратчайшего пути в графе

Поиск кратчайшего пути в графе между двумя точками - это нахождение такой последовательности дуг (или дуги), ведущей от начальной точки до конечной, при которой сумма их весов будет минимальной.

Рассмотрим задачу поиска кратчайшего пути между двумя заданными вершинами S и t для случая неотрицательной матрицы весов.

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

Рассмотрим суть алгоритма Дейкстры.

Пусть l(Xi) - пометка вершины Xi.

Присваивание начальных значений

Шаг первый

Положить 1(S) = 0 и считать эту пометку постоянной.

Положить l(Xi) = ∞ для всех Xi ≠ S, и считать эти пометки временными.

Положить р = S,

где р- вспомогательная величина, равная номеру той вершины, которая на данном шаге получает постоянную пометку.

Обновление пометок

Шаг второй

Для Х є Г(р), пометки которых временные, изменить их в соответствии со следующим выражением:

l(Xi)=min[ l(Xi); l(p)+c(p,Xi) ] (1)

Превращение пометки в постоянную

Шаг третий

Среди всех вершин с временными пометками найти такую, для которой l(Xi*)=min[l(Xi)]

Шаг четвертый

Считать пометку вершины Xi* постоянной и положить p =Xi*.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: