В задаче требуется для заданного ориентированного графа найти путь, содержащий
заданное множество вершин.
Для решения задачи рассмотрим конденсацию данного графа — граф, получаю-
щийся из исходного объединением сильно связных компонент в вершины (подробнее
см. в книге Кормена раздел "Сильно связные компоненты"). Если какая-то верши-
на исходного графа входила в множество обязательных для посещения вершин, то
вершина, соответствующая содержащей её компоненте сильной связности, должна
будет лежать на искомом пути.
Теперь решим исходную задачу для графа, не содержащего циклов.
Рассмотрим топологическую сортировку данного графа (подробнее см. в книге Кор-
мена раздел "Топологическая сортировка"). Возьмём отмеченные вершины в том
порядке, в котором они входят в эту топологическую сортировку. Если искомый
путь существует, то самой первой вершиной в этом списке будет вершина старта,
самой последней — вершина финиша, а для каждой пары соседних вершин этого
списка будет существовать некоторый путь из более ранней вершины в следующую.
Если это не выполняется, значит, что либо из стартовой вершины нельзя добраться
до всех остальных, либо не из всех отмеченных вершин можно добраться до фини-
ша, либо для каких-то двух отмеченных вершин u и v не существует пути как из u
в v, так и из v в u (если бы были оба таких пути, вершины u и v объединились бы
в одну компоненту сильной связности, а если нет ни одного пути, то очевидно, что
эти две вершины одному пути принадлежать не могут).
Теперь найдём путь, в ориентированном графе без циклов, содержащий заданные
вершины в определённом порядке. Это можно сделать, например, так. Пусть v1, v2,
. . ., vk — список обязательных вершин в порядке обхода. Найдём путь из v2 в v1
по обратным рёбрам, затем путь из v3 в v2 по обратным рёбрам, и т.д. до пути из
포함 하는 경로 찾을 수는 주어진된 그래프에 필요한 작업은주어진 많은 봉우리 다.문제를 해결 하기 위해 응축의이 그래프를 살펴보겠습니다는 그래프를 얻을-(자세히 상단에 원래 협회 강하게 연결 된 구성 요소에서 보고cm입니다. 도 서 섹션에 Cormen "강하게 연결 구성 요소"). 할 경우-소스에서 그래프-정점, 무리의 일부 였다구성 요소에 해당 하는 피크 그것은 강한 응집력, 포함 한다필요한 경로에 거짓말을 합니다.이제 그래프 사이클을 포함 하지 않는 대 한 원래 문제를 해결.이 그래프에 토폴로지 정렬 고려 (오호-책을 참조미 나 "위상 정렬" 섹션). 받아 표시 된 봉우리는이 토폴로지 정렬에 나타나는 순서입니다. 경우 검색존재 하는 경로,이 목록에 있는 첫 번째 피크 정점, 시작 됩니다.가장 최근은 결승 선의 정점이 인접 한 꼭지점의 각 쌍에 대 한거기 목록 다음에 이전 피크에서 몇 가지 방법일 것 이다.이 실패 하면, 그것은 시작 정점 중 연결할 수 없는 의미모든 사람에 게, 또는 모든 태그 봉우리를 도달할 수 있다 Fini-샤, 당신과 v 표시 된 어떤 두 꼭지점에 대 한 경로가 없음을 모두 u에서 또는(만약 그들이 두 방법, 당신과 v 병합 정점 u에 v에 v,강력한 연결성의 한 구성 요소 그리고 경우 경로가, 그것은 분명 하이 두 정점 동일에 속하는 경로 수 없습니다).이제는 그래프 사이클 없이 지정 된 경로 찾을특정 순서로 상판입니다. 당신은, 예를 들어 수 있습니다. V1, v2, 하자..., vk-크롤 링 하기 위해서는 필수 꼭지점의 목록. V 1에서 v 2의 경로 찾기역 립, 역 립, 등의 방법에 대 한 v 2 v 3에서 경로에
번역되고, 잠시 기다려주십시오..
주어진 방향 그래프에 필요한 작업이 포함 된 경로를 찾을 수 있습니다
정점의 주어진 집합을.
이 문제를 해결 그래프의 응축 생각하기 - 영수증의 그래프
정점의 원래 협회 강하게 연결 구성 요소에서 schiysya (자세한 내용은
참조 코먼을 책에서 "강력 구성 요소를 연결"할 수 있습니다.) . 어떤 정점 경우
원래의 그래프는 필수 방문 정점의 집합에 포함 된
구성 요소해야 강한 연결을 포함하는 해당 정점
알 수없는 경로에 거짓말을 할 수는.
지금. 어떤 사이클을 포함하지 않는 그래프에 대한 초기 문제를 해결
그래프의 위상 정렬을 고려 (. 책 콘 참조
이름 섹션 "토폴로지 종류"). 에 표시된 정점을 가지고
그들이 위상 종류에 입력 할 수있는 순서를. 타겟 경우
경로가 존재하고 목록 최초 정점은 발사의 상단 것이다
최신 - 마침의 상부, 그리고 인접한 피크들의 각 쌍에 대해
.리스트는 다음 하나의 이전 피크 몇 가지 방법이있을 것이다
그렇지 않은 경우는 즉, 어느 정점부터는 도달 할 수없는
모든 다른 전에 여부 표시된 모든 피크를 fini- 도달 할
샤 또는 선택된 두 정점 u 및 V는 U로부터 경로로서 존재하지 않는다
(경우에 U의 V 행, 및 v 이러한 방법으로, U 및 V는 함께 결합되어 꼭지점 모두 있었다
방법이없는 경우에 강한 연결의 단일 성분, 및, 그 명백
두 피크 편도. 생략) 수 속한
이제 우리가 함유 사이클없이 방향 그래프에서 경로를 찾을 정의 된
특정 순서에 봉우리. 이는 따라서, 예를 들어, 수행 될 수있다. V1,하자
V2를 ,. . ., Vk을은 - 호랑이의 필수 목록을 꼭대기. 우리는 V2로부터 V1까지 길을 찾을 수
역방향 에지, V3의 다음 경로 역방향 에지 V2 등 의 경로에
번역되고, 잠시 기다려주십시오..