Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

594 Глава 13. Алгоритмы графа

13.1 Графы

Граф - способ представлять отношения, которые существуют между парами объектов. Таким образом, граф - ряд объектов, названных вершинами, вместе с коллекцией попарных связей между ними. Это понятие «графа» не должно быть доводом «против» - сплавленный с гистограммами и заговорами функции, поскольку эти виды «графов» не связаны с темой этой главы. У графов есть применения в массе различных областей, включая отображение, транспортировку, электротехнику и компьютерные сети.

Рассматриваемый абстрактно, граф G является просто набором V из вершин и коллекции E пар вершин от V, названный краями. Таким образом граф - способ представлять связи или отношения между парами объектов от некоторого набора V. Некоторые книги используют различную терминологию для графов и относятся к тому, что мы называем вершинами как узлами и что мы называем краями как дугами. Мы используем термины «вершины» и «края».

Края в графе или направлены или не направлены. Край (u, v), как говорят, направлен от u до v, если паре (u, v) приказывают с u, предшествующим v. Край (u, v), как говорят, не направлен, если паре (u, v) не приказывают. Ненаправленные края

иногда обозначаемый с примечанием набора, какu, v, но для простоты мы используем пару

примечание (u, v), отмечая, который в ненаправленном случае (u, v) совпадает с (v, u). Графы

как правило, визуализируются, таща вершины как овалы или прямоугольники и края как сегменты или кривые, соединяющие пары овалов и прямоугольников. Следующее - некоторые примеры направленных и ненаправленных графов. Пример 13.1: Мы можем визуализировать сотрудничество среди исследователей cer-дисциплины оловянной амальгамы, строя граф, вершины которого связаны с пере - сами искатели, и чьи края соединяют пары вершин, связанных с исследователями, которые создали в соавторстве газету или книгу. (См. рисунок 13.1.) Такие края не направлены, потому что coauthorship - симметричное отношение; то есть, если у A есть coau-thored, что-то с B, тогда B обязательно создало в соавторстве что-то с A.

Рисунок 13.1: Граф coauthorship среди некоторых авторов.

13.1. Графы 595

Пример 13.2: ориентированная на объект программа может быть связана с графом чей

вершины представляют классы, определенные в программе и чьи края указывают в - heritance между классами. Есть край от вершины v к вершине u, если класс для v расширяет класс для u. Такие края направлены, потому что отношение наследования только входит в одно направление (то есть, это асимметрично).

Если все края в графе не направлены, то мы говорим, что граф - ненаправленный граф. Аналогично, направленный граф, также названный диграфом, является графом, края которого все направлены. Граф, который и направил и не направил края, часто называют смешанным графом. Обратите внимание на то, что ненаправленный или смешанный граф может быть преобразован в направленный граф, заменив каждый ненаправленный край (u, v) парой направленных краев (u, v) и (v, u). Часто полезно, однако, сохранять ненаправленные и смешанные графы представленными, как они, поскольку у таких графов есть несколько заявлений, таких как заявление следующего примера.

Пример 13.3: городская карта может быть смоделирована графом, вершины которого меж - секции или тупики, и чьи края - отрезки улиц без intersec-tions. Этот граф и не направил края, которые соответствуют отрезкам улиц с двусторонним движением и направили края, которые соответствуют отрезкам односторонних улиц. Таким образом, таким образом, граф, моделируя городскую карту является смешанным графом.

Пример 13.4: Физические примеры графов присутствуют в сетях электропроводки и слесарного дела здания. Такие сети могут быть смоделированы как графы, где каждый соединитель, приспособление или выход рассматриваются как вершина, и каждый uninter-rupted протяжение провода или трубы рассматривается как край. Такие графы фактически com-ponents намного больших графов, а именно, местная власть и водная распределительная сеть - работы. В зависимости от определенных аспектов этих графов, которыми мы интересуемся, мы можем рассмотреть их края, как не направлено или направлено, потому что в принципе вода может, flow в трубе и токе может flow в проводе в любом направлении.

Эти две вершины, к которым присоединяется край, называют вершинами конца (или конечные точки) края. Если край направлен, его первая конечная точка - его происхождение, и другой место назначения края. Две вершины u и v, как говорят, смежны, если есть край, вершины конца которого - u и v. Край, как говорят, является инцидентом на вершине, если вершина - одна из конечных точек края. Коммуникабельные края вершины - направленные края, происхождение которых - та вершина. Поступающие края вершины - направленные края, место назначения которых - та вершина. Степень вершины v, обозначенный градус (v), является числом краев инцидента v. В степени и-степень вершины v являются числом поступающих и коммуникабельных краев v и обозначены indeg (v) и outdeg (v), соответственно.

596

Глава 13. Пример Алгоритмов графа 13.5: Мы можем изучить воздушные перевозки, строя граф G, названный сетью полета, вершины которой связаны с аэропортами, и чьи края связаны с flights. (См. рисунок 13.2.) В графе G, направлены края, потому что у данного flight есть определенное направление путешествия (от аэропорта происхождения до аэропорта назначения). Конечные точки края e в G соответствуют соответственно происхождению и месту назначения для flight, соответствующего e. Два аэропорта смежны в G, если есть flight, что flies между ними и край e являются инцидентом на вершину v в G если flight для e flies к или из аэропорта для v. Коммуникабельные края вершины v соответствуют flights за границу из аэропорта v, и поступающие края соответствуют прибывающему flights в аэропорт v. Наконец, в степени из вершины v G соответствует числу прибывающего flights в аэропорт v, и-степень вершины v в G соответствует числу flights за границу.

Определение графа именует группу краев как коллекция, не набор, таким образом допуская два ненаправленных края, чтобы иметь те же самые вершины конца, и для двух направленных краев, чтобы иметь то же самое происхождение и то же самое место назначения. Такие края называют параллельными краями или многократными краями. Параллельные края могут быть в flight сети (Пример 13.5), когда многократные края между той же самой парой вершин могли указать на различный flights, воздействующий на тот же самый маршрут в разное время дня. Другой специальный тип края - тот, который соединяет вершину с собой. А именно, мы говорим, что край (ненаправленный или направленный) является самопетлей, если ее две конечных точки совпадают. Самопетля может произойти в графе, связанном с городской картой (Пример 13.3), где это соответствовало бы «кругу» (изгибающаяся улица, которая возвращается к ее отправному вопросу).

За редким исключением у графов нет параллельных краев или самопетель. Такие графы, как говорят, просты. Таким образом мы можем обычно говорить, что края простого графа - ряд пар вершины (и не только коллекция). Всюду по этой главе мы предполагаем, что граф прост, если иначе не определено.

Рисунок 13.2: Пример направленного графа, представляющего flight сеть. Конечные точки края UA 120 СЛАБЫ и ПОРЯДОК; следовательно, СЛАБЫЙ и ПОРЯДОК смежны. В степени из DFW равняется 3, и-степень DFW равняется 2.