Как найти все вершинно-непересекающиеся пути в графе? - PullRequest
6 голосов
/ 23 марта 2012

Предположим, есть 3 целевых узла на графике.

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

Для любого одного узла, скажем, узла i, как найти все непересекающиеся вершины пути от узла i до трех целевых узлов?

1 Ответ

17 голосов
/ 23 марта 2012

Вы можете решить эту проблему, сведя ее к задаче о максимальном потоке в правильно построенном графике.Идея заключается в следующем:

  1. Разбить каждый узел v на графике на узлы: v in и v out .
  2. Для каждого узла v добавьте ребро емкости один от v в до v out .
  3. Замените каждое другое ребро (u, v) в графе накрай от u out до v in емкости 1.
  4. Добавить новый выделенный целевой узел t.
  5. Для каждого целевого узлаv, добавьте ребро из v в к t с емкостью 1.
  6. Найдите максимальный поток от s out до t.Значение потока - это число узловых непересекающихся путей.

Идея этой конструкции заключается в следующем.Любой путь потока от начального узла s к узлу назначения t должен иметь емкость один, поскольку все ребра имеют емкость один.Поскольку все емкости являются интегральными, существует интегральный максимальный поток.Никакие два пути потока не могут проходить через один и тот же промежуточный узел, потому что при прохождении через узел в графе путь потока должен пересекать границу от v в до v out , а пропускная способностьздесь был ограничен одним.Кроме того, этот путь потока должен достигать t, заканчиваясь одним из трех специальных узлов, которые вы определили, а затем следуя за ребром от этого узла к t.Таким образом, каждый путь потока представляет собой непересекающийся путь узла от исходного узла s к одному из трех узлов назначения.Соответственно, вычисление максимального потока здесь соответствует нахождению максимального числа непересекающихся узлов путей, которые вы можете выбрать из s для любого из трех пунктов назначения.

Надеюсь, это поможет!

...