Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция Алгоритмы на графах.doc
Скачиваний:
102
Добавлен:
20.06.2014
Размер:
1.78 Mб
Скачать
  1. Алгоритмы на графах

    1. Обходы графов

Обход графа – это некоторое перечисление его вершин (и/или ребер). Среди всех обходов наиболее известны поиск в глубину и в ширину. Алгоритмы поиска в глубину и в ширину лежат в основе многих алгоритмов на графах.

      1. Поиск в глубину (пг)

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

Результат работы алгоритма – 2 списка: , ,

  1. -номер вершины ,

имя вершины, из которой вершина получила свой номер.

В процессе работы алгоритма используется стек .

Алгоритм поиска в глубину в неориентированном связном графе

  1. ; ; ;

; // - последний присваиваемый номер

; // - указатель конца стека , т.е. имя последней вершины стека .

  1. ; // - исследуемая вершина

  2. Просматривая список , найти новую ещё не просмотренную вершину , и перейти к п.4. Если все вершины в списке уже просмотрены, то перейти к п.5

  3. ; ; ; ; ; вершина получила - номер и занесена в стек .

  4. ; // вершина вычеркнута из . Если , то конец. Иначе перейти к п.2.

      1. Поиск в ширину (пш)

Заметим, что при поиске в глубину, чем позднее была посещена, тем раньше она будет использована (стек). При чем раньше посещается вершина, тем раньше оно используется (очередь).

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

Алгоритм поиска в ширину в неориентированном связном графе

1. ; ; ;

; // адрес первой занятой ячейки списка

; // адрес последней занятой ячейки списка

; // последний ый номер

  1. ; // выбрана первая вершина очереди

; // количество вершин, смежных с

  1. ;

  2. Если вершина уже просмотрена, то перейти к п.5.

Иначе ; ; ; ; ; // вершина помечена и включена в и перейти к п.5.

  1. Если , то перейти к п.6, иначе и следовать к п.4

  2. ; // вершина исключена из .

  3. Если , то конец // , т.е. все вершины помечены. Иначе следовать к п.2.

      1. Нахождение деревьев и остовов с помощью пг и пш

Пусть - связный граф (неориентированный). Пусть его дерево покрытия. Рёбра этого дерева будим называть ветвями, а все остальные рёбра графа – хордами.

Процедуры и можно простым способом использовать для нахождения деревьев покрытия. В обоих случаях достижение вершины из вершины вызывает включение в дерево дуги .

Нахождение дерева покрытия с помощью .

Результат работы алгоритма – дерево покрытия (ориентированное). Пусть - вершина, с которой начинается поиск.

1.; ; // множество найденных ветвей

; // указатель конца стека

  1. ;

  2. Просматривая список , найти новую, ещё не просмотренную вершину , и перейти к п.4. Если таких вершин нет, то следовать к п.5.

  3. ; ; ; Перейти к п.2.

  4. . Если , то конец. Иначе следовать к п.2.

Вершину , с которой мы начинали поиск в графе, назовём корнем дерева покрытия .