logo
Методичка по исследованию операций

2.4. Алгоритм решения задачи с помощью произвольного дерева маршрутов

0. Исходные данные: орграф [A, R] в графическом представлении с весами v(ai, aj) на дугах.

1. Определяем начальную и конечную вершины a0 и an.

2. Строим произвольное дерево маршрутов с корнем в a0 (прямым ходом):

а) организуем вектор вершин М и вектор дуг Д, начальную вершину a0 заносим в М;

б) исходящие дуги (а0, ак) заносим в Д, а вершины аk – в М;

в) для каждого аk находим все исходящие дуги (аk, ае); если аеМ, то заносим ее в М, а дугу (аk, ае) – в Д; иначе переходим к новой ае;

г) проверка: если М содержит не все вершины из А, то выбираем новую аk и переходим к (в); иначе – КОНЕЦ.

3. Индексируем все вершины аk построенного дерева, образуя вектор индексов I.

4. Строим opt дерево, улучшая индексы вершин:

а) дополнительно к Д организуем вектор дуг антидерева – АД;

б) включаем в дерево очередную дугу (ai, aj) антидерева и проверяем: если индекс aj улучшился, то дугу (ai, aj) заносим в вектор Д вместо дуги (аk, аj), которую заносим в АД, и переходим к (3). Иначе – переходим к следующей дуге антидерева. И так далее, пока индекс хотя бы одной вершины можно улучшить.

В результате получаем:

1) индекс аn есть длина opt пути: I(an) = opt |S(а0, аn)|;

2) путь S(а0, аn) однозначно определяется на построенном дереве обратным ходом.

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4