Кратчайшие пути из одной вершины



Основные определения


Кратчайшие пути и релаксация


Алгоритм Дейкстры

Алгоритм Беллмана - Форда

Кратчайшие пути в ациклическом ориентированном графе

Ограничения на разности и кратчайшие пути

Задачи

Литература

Основные определения

Ориентированный граф G = (V, E) состоит из множества вершин V и множества дуг E. Вершины также называют узлами, а дуги – ориентированными ребрами. Дуга представима в виде упорядоченной пары вершин (v, w), где вершина v называется началом, а wконцом дуги.

Неориентированный граф G = (V, E) состоит из конечного множества вершин V и множества ребер E. В отличие от ориентированного графа, здесь каждое ребро (v, w) соответствует неупорядоченной паре вершин: если (v, w) – неориентированное ребро, то (v, w) = (w, v).

Вершина Х называется инцидентной ребру G, если ребро соединяет эту вершину с какой-либо другой вершиной.

В задаче о кратчайшем пути нам дан ориентированный взвешанный граф G = (V, E) с вещественной весовой функцией w: E R

Вес пути p=(v0,v1,...,vk) - это сумма весов рёбер, входящих в этот путь:

Вес кратчайшего пути из u в v равен, по определению,

Кратчайший путь из u в v - это любой путь p из u в v, для которого

Граф называется вырожденным, если у него нет рёбер.

Вершины называются смежными, если существует ребро, их соединяющее.

Пустым называется граф без рёбер. Полным называется граф, в котором каждые две вершины смежные.

Цикл, в котором все вершины, кроме первой и последней, попарно различны, называется простым циклом.

Граф называется связным, если для любых двух вершин существует путь, соединяющий эти вершины.



Рёбра отрицательного веса

Иногда веса ребер могут быть отрицательными. При этом важно, есть ли циклы отрицательного веса. Если из вершины s можно добраться до цикла отрицательного веса, то потом можно обходить этот цикл сколь угодно долго, и вес будет всё уменьшаться, так что для вершин этого цикла кратчайших путей не существует:

В таком случае можно считать, что вес кратчайшего пути есть −∞.

Если же циклов отрицательногов веса нет, то любой цикл можно выбросить не удлиняя пути. Путей без циклов конечное число, так что вес кратчайшего пути корректно определен.

Представление кратчайших путей в алгоритме

Часто требуется не просто подсчитать веса кратчайших путей, но и найти сами эти пути. Пусть G = (V, E) - заданный граф. Для каждой вершины будем помнить её предшественника . Предшественик вершины - это либо другая вершина, либо NIL. По завершении работы алгоритмов цепочка предшественников , начинающаяся с произвольной вершины v , будет представлять собой кратчайший путь из s в v , так что, если ≠ NIL, процедура Print-Path(G,s,v) напечатает кратчайший путь из s в v.

До завершения работы алгоритмов цепочки, получаемые итерациями π, не обязательно будут кратчайшими путями, но всё равно можно рассмотреть ориентированный подграф предшествования Gπ = (Vπ , E π ), определенный так: вершины Gπ - это те вершины G, у которых предшественник отличен от NIL, плюс исходная вершина:

Vπ = {v V : π [v] ≠ NIL} {s}
. Рёбра Gπ - это стрелки, указывающие из π [v] ≠ NIL в v:
Eπ = {(π [v], v) E : v Vπ \ {s}}
.

Дерево кратчайших путей с корнем в s есть ориентированный подграф G´ = (V´, E´),

где V ´ V и E ´ E , для которого:

  1. V ´ - множество вершин, достижимых из вершины s,
  2. G ´ является деревом с корнем s,
  3. для каждого v V ´ путь из s в v в графе G ´ является кратчайшим путем из s в v в графе G .

Вперед

Вверх

 

©Оформитель и составитель: Фёдорова Т.А., 2009

 


Рейтинг ресурсов УралWeb
Сайт создан в системе uCoz