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

Часто требуется не просто подсчитать веса кратчайших путей, но и найти сами эти пути. Пусть 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.

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



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