Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23


Download 1.85 Mb.
Pdf ko'rish
bet99/111
Sana19.11.2023
Hajmi1.85 Mb.
#1786905
TuriУчебное пособие
1   ...   95   96   97   98   99   100   101   102   ...   111
Bog'liq
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев

5.8. А
ЛГОРИТМЫ О СВЯЗНОСТИ ГРАФА
 
Понятие связности графа было введено в п. 5.1 настоящей главы. На-
помним, что в связном графе для любой пары вершин существует соединяю-
7 / 23


192 
щая их простая цепь. Далее будут рассмотрены некоторые алгоритмы, в ко-
торых существенным образом используется это понятие. 
5.8.1. Т
ОПОЛОГИЧЕСКАЯ СОРТИРОВКА
 
Дан ориентированный граф без циклов, т. е. имеется N узлов, пронуме-
рованных от 0 до N 
− 1, и из каждого узла выходят несколько ребер в другие 
узлы. Задача топологической сортировки формулируется следующим обра-
зомТребуется упорядочить вершины графа так, чтобы конец любого ребра 
предшествовал его началу.
Такое упорядочение вершин всегда возможно. Действительно, из усло-
вия отсутствия циклов вытекает, что есть узел, из которого не выходят ребра. 
Выберем его в качестве исходного. Удаляя все ребра, ведущие в него, сводим 
задачу к графу с меньшим числом узлов и продолжаем рассуждение по ин-
дукции. 
Напомним, что узлы ориентированного графа без циклов хранятся в эк-
земплярах класса TNode (листинг 5.40). 
Листинг 5.40. Структура узлов ориентированного графа 
public class TNode 

public string name; //
public TEdge[] Edge; // 
ребра 
public bool visit; 
public int x, y;
public int numVisit; 
public Color color; 
public int dist, oldDist; 

В каждом Node[i] хранится динамический массив ребер Edge, элемен-
ты которого указывают на другие узлы. В поле visit мы будем, как обычно, 
хранить сведения о том, какие вершины пройдены, и корректировать его од-
новременно с прохождением узла. 
Построим рекурсивный алгоритм, выполняющий топологическую сор-
тировку не более чем за O(N + M) действий, где M — число ребер графа. 
Программа будет помещать номера узлов в стек (листинг 5.41). Будем гово-
рить, что последовательность вершин корректна, если: 
8 / 23


193 
− ни одна из вершин не посещалась дважды; 
для любой вершины, входящей в эту последовательность, все 
вершины, в которые ведут исходящие из нее дуги, были помеще-
ны в стек до нее. 

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   95   96   97   98   99   100   101   102   ...   111




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling