![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Анатомия поиска DFS в орграфах
Мы можем воспользоваться программой поиска в глубину на неориентированных графах, которая рассматривалась в главе 18, для обхода каждого ребра и каждой вершины орграфа. Основной принцип этого рекурсивного алгоритма можно сформулировать следующим образом: чтобы посетить каждую вершину, достижимую из данной вершины, мы помечаем эту вершину как посещенную, затем (рекурсивно) посещаем все вершины, в которые можно пройти из каждой вершины, внесенные в список смежных с ней вершин. В неориентированных графах возможны два представления одного ребра, однако второе представление, которое употребляется при поиске в глубину, всегда приводит в помеченную вершину, в силу чего оно игнорируется (см. раздел 18.2). В орграфе употребляется только одно представление каждого ребра, поэтому мы можем рассчитывать на то, что алгоритмы поиска в глубину в орграфах упростятся. Однако орграфы по своей природе являются более сложными комбинаторными объектами, так что эти ожидания не имеют под собой почвы. Например, деревья поиска, которые используются с целью лучшего понимания функционирования алгоритма, обладают более сложной структурой для орграфов, нежели для неориентированных графов. Подобное осложнение делает алгоритмы обработки орграфов более трудными для разработки. Например, как мы вскоре убедимся, гораздо труднее проводить исследования ориентированных путей в орграфах, чем исследовать пути в неориентированных графах. Подобно тому, как мы поступали в главе 18, воспользуемся двумя терминами. Термин стандартный поиск в глубину на списках смежных вершин (standard adjacency-lists DFS) будет обозначать процесс вставки последовательности ребер в АТД орграфа, представленного в виде списков смежных вершин (конструктор из программы 17.9, при вызове которого во втором аргументе передается значение true), с последующим выполнением поиска в глубину, например, с помощью программы 18.3. Второй, и аналогичный, термин стандартный поиск в глубину на матрице смежности (standard adjacency-matrix DFS) будет обозна- Часть 5. Алгоритмы на графах
Например, на рис. 19.9 приводится дерево рекурсивного вызова, которое описывает, как действует алгоритм стандартного поиска в глубину на орграфе, представленном в виде списков смежных вершин на примере орграфа из рис. 19.1. Так же, как и в случае неориентированных графов, подобные деревья содержат внутренние узлы, соответствующие вызовам рекурсивной функции поиска в глубину для каждой вершины, при этом связи, ведущие во внешние узлы, соответствуют ребрам, которые приводят в уже просмотренные вершины. Классификация узлов и связей дает нам информацию о поиске (и об орграфе), однако такая классификация применительно к орграфам существенно отличается от классификации применительно к неориентированным графам. В неориентированных графах каждая связь в дереве поиска в глубину относится к одному из четырех классов, в зависимости от того, соответствует ли она ребру графа, которое ведет к рекурсивному вызову, и в зависимости от принадлежности ребра, просматриваемого алгоритмом поиска в глубину, к первому или второму виду представления. В орграфах имеет место соответствие один к одному между связями дерева и ребрами графа, они попадают в один из четырех различных классов: ■ Класс ребер, представляющих рекурсив ■ Класс ребер, ведущих из той или иной ■ Класс ребер, ведущих из вершины к по РИСУНОК 19.9. ЛЕС DFS ДЛЯ ОРГРАФОВ Данный лес описывает стандартный поиск в глубину на орграфе, представленном в виде списков смежных вершин на примере графа, показанного на рис. 19.1. Внешние узлы представляют ранее просмотренные внутренние узлы с теми же метками; во всем остальном этот лес является представлением орграфа, все ребра которого направлены вниз. В рассматриваемом лесе используются четыре типа ребер: древесные ребра, ведущие во внутренние узлы; обратные ребра, ведущие во внешние узлы, представляющие предшественников (заштрихованные кружки); нисходящие ребра, ведущие во внешние узлы, представляющие потомков (заштрихованные квадратики); и поперечные ребра, ведущие во внешние узлы, не являющиеся ни предшественниками, ни потомками (незаштрихованные квадратики). Мы можем определить тип ребер, ведущих в посещенные узлы, сравнивая их номера узлов-источников и узлов назначения при обходе в прямом и обратном порядке (внизу):
|