Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
32
Добавлен:
01.05.2014
Размер:
11.74 Кб
Скачать

Алгоритм Флойда A { TEXT-DECORATION: none } A:hover { COLOR: #ff6600; TEXT-DECORATION: underline } H2 { FONT-WEIGHT: bold; FONT-SIZE: 14pt; FONT-FAMILY: sans-serif } PRE { FONT-SIZE: 9pt } .source { FONT-SIZE: 9pt; COLOR: #666699 } .l2 { FONT-SIZE: 10pt } .l3 { FONT-SIZE: 9pt }

Path: Математика » Графы и маршруты » Кратчайшие пути » Алгоритм Флойда   Алгоритм Флойда

Дано: непyстой взвешенный гpаф G=(V, E) с пpоизвольными весами ребер (дуг). Требуется найти длины кpатчайших пyтей между всеми парами вершин графа, если в графе нет циклов (контуров) отрицательной суммарной длины, либо обнаружить наличие таких контуров. Инициализация: 1. Построим матрицу D0 размерности |V| x |V|, элементы которой определяются по правилу: dii0= 0; dij0= Weight(vi, vj), где i<>j, если в графе существует ребро (дуга) (vi, vj); dij0= бесконечность , где i<>j, если нет ребра (дуги) (vi, vj).

2. m:=0. Основная часть: 1. Построим матрицу Dm+1 по Dm, вычисляя ее элементы следующим образом:

dijm+1=min{dijm, di(m+1)m + d(m+1)jm}, где i<>j; diim+1=0 (*).

Если dimm + dmim < 0 для какого-то i, то в графе существует цикл (контур) отрицательной длины, проходящий через вершину vi; ВЫХОД. 2. m:=m+1; если m<|V|, то повторяем шаг (1), иначе элементы последней построенной матрицы D|V| равны длинам кратчайших путей между соответствующими вершинами; ВЫХОД. КОНЕЦ Если требует найти сами пути, то перед началом работы алгоритма построим матрицу P с начальными значениями элементов pij=i. Каждый раз, когда на шаге (1) значение dijm+1 будет уменьшаться в соответствии с (*) (т.е. когда di(m+1)m + d(m+1)jm<dijm), выполним присваивание pij:=p(m+1)j. В конце работы алгоритма матрица P будет определять кратчайшие пути между всеми парами вершин: значение pij будет равно номеру предпоследней вершины в пути между i и j (либо pij=i, если путь не существует). Примечаниe: если граф - неориентированный, то все матрицы Dm являются симметричными, поэтому достаточно вычислять элементы, находящиеся только выше (либо только ниже) главной диагонали. Обсудить на форуме »

  Комментарии для веб-мастера

Ваши комментарии. Вопросы будут удалены: для них есть форум. Имя: E-mail:   

Copyright 2000-2002 © Ilia Kantor, при поддержке проекта MANUAL.RU

[AD-SIZE] hotlog_js="1.0";hotlog_d=document; hotlog_n=navigator;hotlog_rn=Math.random(); hotlog_n_n=(hotlog_n.appName.substring(0,3)=="Mic")?0:1; hotlog_r=""+hotlog_rn+"&s=2161&r="+escape(hotlog_d.referrer)+"&pg="+ escape(window.location.href); hotlog_d.cookie="hotlog=1"; hotlog_r+="&c="+(hotlog_d.cookie?"Y":"N"); hotlog_d.cookie="hotlog=1; expires=Thu, 01-Jan-70 00:00:01 GMT" hotlog_js="1.1";hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N") hotlog_js="1.2";hotlog_s=screen; hotlog_r+="&wh="+hotlog_s.width+'x'+hotlog_s.height+"&px="+((hotlog_n_n==0)? hotlog_s.colorDepth:hotlog_s.pixelDepth) hotlog_js="1.3" hotlog_r+="&js="+hotlog_js; hotlog_d.write("")