This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
В случае классической задачи, поиска пути минимальной длины между двумя вершинами графа, мы поддерживаем в каждой посещенной алгоритмом вершине графа минимальную длину пути до этой вершины.
Здесь стоит оговориться, что будем именовать множество **X** посещенными вершинами, а**V - X** - часть графа, для которой еще нужно найти величину пути или узкого места.
В отличии от классического алгоритма, решение этой задачи должно поддерживать величину актуального узкого места пути, приводящего в вершину **v ∈ X**.
А при добавлении новой вершины из **V - X**, мы должны смотреть не увеличивает ли ребро**(v,u_1)** величину узкого места пути, которое теперь приводит в **u_1**.
Если ребро**(v, u_1)** увеличивает узкое место, то лучше рассмотреть вершину **u_2**, ребро**(v, u_2)** до которой легче **(v,u_1)**.
Поиск неувеличивающих узкое место ребёр нужно осуществлять не только среди соседей определенного узла **v**, но и среди всех **v ∈ X**, поскольку отдавая предпочтение вершине, путь в которую имеет наименьшее узкое место в данный момент, мы гарантируем, что мы не ухудшаем ситуацию для других вершин.
В результате разбора выше, предлагается руководствоваться следующей формулой при выборе очередной вершины из непосещенных и обновлении величин, которые мы поддерживаем: