Что такое список смежности графа

Теория графов. Часть третья (Представление графа с помощью матриц смежности, инцидентности и списков смежности)

Все, что познается, имеет число, ибо невозможно ни понять ничего, ни познать без него – Пифагор

Список смежности (инцидентности)

Взвешенный граф (коротко)

Итак, мы умеем задавать граф графическим способом. Но есть еще два способа как можно задавать граф, а точнее представлять его. Для экономии памяти в компьютере граф можно представлять с помощью матриц или с помощью списков.

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

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

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

Матрица смежности

Но тем кто знает, но чуть забыл, что такое смежность есть краткое определение.

Смежность – понятие, используемое только в отношении двух ребер или в отношении двух вершин: два ребра инцидентные одной вершине, называются смежными; две вершины, инцидентные одному ребру, также называются смежными.

Матрица (назовем ее L) состоит из n строк и n столбцов и поэтому занимает n^2 места.

Каждая ячейка матрицы равна либо 1, либо 0;

Ячейка в позиции L (i, j) равна 1 тогда и только тогда, когда существует ребро (E) между вершинами (V) i и j. Если у нас положение (j, i), то мы также сможем использовать данное правило. Из этого следует, что число единиц в матрице равно удвоенному числу ребер в графе. (если граф неориентированный). Если ребра между вершинами i и j не существует, то ставится 0.

Для практического примера возьмем самый обыкновенный неориентированный граф:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

А теперь представим его в виде матрицы:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Ячейки, расположенные на главной диагонали всегда равны нулю, потому что ни у одной вершины нет ребра, которое и начинается, и заканчивается в ней только если мы не используем петли. То есть наша матрица симметрична относительно главной диагонали. Благодаря этому мы можем уменьшить объем памяти, который нам нужен для хранения.

С одной стороны объем памяти будет:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Но используя вышеописанный подход получается:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

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

Если граф неориентированный, то, когда мы просуммируем строку или столбец мы узнаем степень рассматриваемой нами вершины.

Если мы используем ориентированный граф, то кое-что меняется.

Здесь отсутствует дублирование между вершинами, так как если вершина 1 соединена с вершиной 2, наоборот соединена она не может быть, так у нас есть направление у ребра.

Возьмем в этот раз ориентированный граф и сделаем матрицу смежности для него:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Если мы работаем со строкой матрицы, то мы имеем элемент из которого выходит ребро, в нашем случаи вершина 1 входит в вершину 2 и 8. Когда мы работаем со столбцом то мы рассматриваем те ребра, которые входят в данную вершину. В вершину 1 ничего не входит, значит матрица верна.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Если бы на главной диагонали была бы 1, то есть в графе присутствовала петля, то мы бы работали уже не с простым графом, с каким мы работали до сих пор.

Матрица инцидентности

Инцидентность – понятие, используемое только в отношении ребра и вершины: две вершины (или два ребра) инцидентными быть не могут.

Матрица (назовем ее I) состоит из n строк которое равно числу вершин графа, и m столбцов, которое равно числу ребер. Таким образом полная матрица имеет размерность n x m. То есть она может быть, как квадратной, так и отличной от нее.

Ячейка в позиции I (i, j) равна 1 тогда, когда вершина инцидентна ребру иначе мы записываем в ячейку 0, такой вариант представления верен для неориентированного графа.

Сразу же иллюстрируем данное правило:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Сумма элементов i-ой строки равна степени вершины.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Одной из особенностей данной матрицы является то, что в столбце может быть только две ненулевых ячейки. Так как у ребра два конца.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Список смежности (инцидентности)

Список смежности подразумевает под собой, то что мы работаем с некоторым списком (массивом). В нем указаны вершины нашего графа. И каждый из них имеет ссылку на смежные с ним вершины.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

В виде списка это будет выглядеть так:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Неважно в каком порядке вы расположите ссылку так как вы рассматриваете смежность относительно первой ячейки, все остальные ссылки указывают лишь на связь с ней, а не между собой.

Так как здесь рассматривается смежность, то здесь не обойдется без дублирования вершин. Поэтому сумма длин всех списков считается как:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

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

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Сумма длин всех списков:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Со списком инцидентности все просто. Вместо вершин в список (массив) вы вставляете рёбра и потом делаете ссылки на те вершины, с которыми он связан.

К недостатку списка смежности (инцидентности) относится то что сложно определить наличие конкретного ребра (требуется поиск по списку). А если у вас большой список, то удачи вам и творческих успехов! Поэтому, чтобы работать максимальной отдачей в графе должно быть мало рёбер.

Взвешенность графа

К примеру, возьмем граф с весами на ребрах:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

И сделаем матрицу смежности:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

В ячейках просто указываем веса ребра, а в местах где отсутствует связь пишем 0 или -∞.

Более подробно данное определение будет рассмотрено при нахождении поиска кратчайшего пути в графе.

Итак, мы завершили разбор представления графа с помощью матрицы смежности и инцидентности и списка смежности (инцидентности). Это самые известные способы представления графа. В дальнейшем мы будем рассматривать и другие матрицы, и списки, которые в свою очередь будут удобны для представления графа с определёнными особенностями.

Если заметили ошибку или есть предложения пишите в комментарии.

Источник

Понятие и представление графа: матрица смежности, список смежности

Определение графа

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Этот граф состоит из 6 вершин, пронумерованных начиная с единицы, и 7 двухсторонних рёбер. Рёбра обычно записывают в виде пар вершин, которые они соединяют: \(1\)-\(2\), \(1\)-\(5\), \(2\)-\(3\), \(2\)-\(5\), \(3\)-\(4\), \(4\)-\(5\), \(4\)-\(6\).

Ориентированные и неориентированные графы

Граф, в котором все рёбра неориентированные, также называют неориентированным, а граф с ориентированными рёбрами, соответственно, ориентированным.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графаЧто такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Пути и циклы

Путём в графе называется последовательность вершин, каждая из которых соединена со следующей ребром. Чаще всего под “путём” подразумевают простой путь, все вершины которого различны. Путь, который проходит через какую-либо вершину более одного раза называют сложным путём.

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

Приведём примеры на этом графе:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Кратные рёбра и петли

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Мультиграфы встречаются в задачах реже чем обычные графы (называемые простыми), но всё же встречаются, поэтому стоит иметь о них элементарное представление.

Связные графы

Граф называется связным если между любой парой вершин существует хотя бы один путь. Как пример рассмотрим следующий граф:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Одно из рёбер проведено штрихами. Если это ребро присутствует, то граф является связным. Если же его убрать, то связность теряется, граф разбивается на две части, друг с другом не связанные. Такие части называются компонентами связности.

Определение дерева

Все изображённые графы являются деревьями:

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Среди множества свойств деревьев можно выделить два самых известных:

Матрица смежности

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

Преимущества матрицы смежности:

Недостатки матрицы смежности:

Список смежности

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

Решим ту же задачу с использованием списка смежности (и С++11 для for-each):

Преимущества списка смежности:

Недостатки списка смежности:

brestprog

Олимпиадное программирование в Бресте и Беларуси

Источник

Список смежности

Список смежности представляет граф в виде массива связанного списка.

Индекс массива представляет вершину и каждый элемент в его связанном списке, а также представляет другие вершины, которые образуют ребро с вершиной.

Представление списка смежности

Граф и его эквивалентное представление списка смежности показаны ниже.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Список смежности эффективен с точки зрения хранения, потому что нам нужно хранить только значения для ребер. Для разреженного графа с миллионами вершин и ребер это может означать много сэкономленного пространства.

Структура списка смежности

Самому простому списку смежности требуется структура данных узла для хранения вершины и структура данных графа для организации узлов.

Давайте рассмотрим структуру данных ниже.

Список смежности C ++

Это та же самая структура, но с помощью встроенного списка структур данных STL в C ++ мы делаем структуру немного чище. Мы также можем абстрагировать детали реализации.

Список смежности Java

Мы используем Java Collections для хранения массива связанных списков.

Тип LinkedList определяет, какие данные вы хотите сохранить в нем. Для помеченного графа вы можете хранить словарь вместо целого значения.

Список смежности Python

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

Код списка смежности в C

Код списка смежности в C++

Код списка смежности Java

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Рекомендуем хостинг TIMEWEB

Рекомендуемые статьи по этой тематике

Источник

Графы: основы теории, алгоритмы поиска

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

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

Одной из важнейших составляющих спортивного программирования является изучение алгоритмов. В этой статье мы охватим большое количество алгоритмов, в том числе все алгоритмы на графах, знание которых понадобится вам для успешного решения задач из теории графов на соревнованиях по программированию. Конечно, одних теоретических знаний алгоритмов недостаточно, и вам придётся набить руку в решении практических задач на таких сайтах, как Codeforces. Настоящая же статья представит вам инструменты, необходимые для освоения важных графовых алгоритмов. Итак, приступим.

Что такое граф?

Графы, в понимании программистов, — это не те графики, которые мы изучали в школе. Это не столбиковые диаграммы или гистограммы.

С точки зрения компьютерных наук и дискретной математики, графы — это абстрактный способ представления типов отношений, например дорог, соединяющих города, и других видов сетей. Графы состоят из рёбер и вершин. Вершина — это точка на графе, а ребро — это то, что соединяет две точки на графе.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графаПример графа

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

Вот список всех терминов, относящихся к теории графов, которые вам нужно знать:

Представление графов в коде

Для того, чтобы использовать алгоритмы на графах в коде, сначала нам нужно разобраться, как осуществляется представление графов в коде. Весь следующий код будет на C++, так как для спортивного программирования я предпочитаю именно этот язык за его скорость и встроенные функции, позволяющие упростить написание решений задач.

Будут показаны два способа представления графов: матрицы смежности и списки смежности. Больше вам пригодится представление графов в виде списка смежности.

Матрицы смежности

Матрица смежности представляет собой граф в виде двумерной матрицы с размерами V x V, где V — количество вершин графа. Матрицы смежности лучше всего применять, когда V² примерно равно E (числу рёбер), то есть когда граф плотный. Запись a_ij обозначает, сколько рёбер соединяют вершину i и вершину j.

Списки смежности

Другой распространенный способ представления графов в коде — списки смежности. Суть в том, что вы создаёте списки соседей для каждой вершины, а затем помещаете все эти списки в другой список. Их лучше всего применять, когда в графе небольшое количество рёбер, то есть когда граф разрежённый. Если у вас взвешенный граф, т.е. каждое ребро графа имеет какой-то вес, то в списке будут содержаться пары для рёбер (сосед, вес).

Поиск в глубину

Теперь, когда мы научились представлять графы в коде, можем приступить к изучению некоторых алгоритмов на графах! Начнём с поиска в глубину (DFS) и завершим поиском в ширину (BFS). Чтобы не загромождать статью, алгоритмы поиска пути не будут здесь рассматриваться (интересующиеся могут ознакомиться с алгоритмом поиска кратчайшего пути Беллмана-Форда).

Поиск в глубину — это один из базовых алгоритмов на графах. Он применяется для поиска расстояния от одной вершины до других вершин в графе. Это алгоритм обхода.

Поиск в глубину помечает каждую вершину в графе одной из двух меток: посещённая или не посещённая. Алгоритм помечает каждую вершину как посещённую, если удаётся избежать циклов. Он работает следующим образом:

Поиск в ширину

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

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

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

Заключение

Освоив теоретическую часть, касающуюся двух самых важных алгоритмов обхода на графах, вам остаётся только практиковаться, чтобы использовать эти алгоритмы в соревнованиях по программированию. Я бы порекомендовал для начала Codeforces: решайте задачи, помеченные тегами bfs и dfs с рейтингом до 1400. Когда почувствуете, что справляетесь с ними, увеличьте сложность.

Отработка навыков решения алгоритмических задач, особенно алгоритмов на графах, поможет вам побеждать на соревнованиях по программированию и успешно проходить технические собеседования. Вперёд — к успехам!

Источник

Что такое список смежности графа

Степень входа вершины – количество входящих в нее ребер, степень выхода – количество исходящих ребер.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Классификация графов

В связном графе между любой парой вершин существует как минимум один путь.

В несвязном графе существует хотя бы одна вершина, не связанная с другими.

Графы также подразделяются на

В ориентированном графе ребра являются направленными, т.е. существует только одно доступное направление между двумя связными вершинами.

В неориентированном графе по каждому из ребер можно осуществлять переход в обоих направлениях.

Частный случай двух этих видов – смешанный граф. Он характерен наличием как ориентированных, так и неориентированных ребер.

Способы представления графа

Граф может быть представлен (сохранен) несколькими способами:

Использование двух первых методов предполагает хранение графа в виде двумерного массива (матрицы). Размер массива зависит от количества вершин и/или ребер в конкретном графе.

Матрица смежности графа — это квадратная матрица, в которой каждый элемент принимает одно из двух значений: 0 или 1.
Число строк матрицы смежности равно числу столбцов и соответствует количеству вершин графа.

Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа
Когда из одной вершины в другую проход свободен (имеется ребро), в ячейку заносится 1, иначе – 0. Все элементы на главной диагонали равны 0 если граф не имеет петель.

Матрица инцидентности (инциденции) графа — это матрица, количество строк в которой соответствует числу вершин, а количество столбцов – числу рёбер. В ней указываются связи между инцидентными элементами графа (ребро(дуга) и вершина).

В неориентированном графе если вершина инцидентна ребру то соответствующий элемент равен 1, в противном случае элемент равен 0.

Матрица инцидентности для своего представления требует нумерации рёбер, что не всегда удобно.
Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Список смежности (инцидентности)
Если количество ребер графа по сравнению с количеством вершин невелико, то значения большинства элементов матрицы смежности будут равны 0. При этом использование данного метода нецелесообразно. Для подобных графов имеются более оптимальные способы их представления.

По отношению к памяти списки смежности менее требовательны, чем матрицы смежности. Такой список можно представить в виде таблицы, столбцов в которой – 2, а строк — не больше, чем вершин в графе.
В каждой строке в первом столбце указана вершина выхода, а во втором столбце – список вершин, в которые входят ребра из текущей вершины.Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Преимущества списка смежности:

Недостатки списка смежности:

Алгоритмы обхода графов

Основными алгоритмами обхода графов являются

Поиск в ширину подразумевает поуровневое исследование графа:

Вершины просматриваются в порядке возрастания их расстояния от корня.
Алгоритм прекращает свою работу после обхода всех вершин графа, либо в случае выполнения требуемого условия (например, найти кратчайший путь из вершины 1 в вершину 6).
Каждая вершина может находиться в одном из 3 состояний:

Фиолетовый – рассматриваемая вершина.
Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа
Применения алгоритма поиска в ширину

Алгоритм поиска в ширину работает как на ориентированных, так и на неориентированных графах.
Для реализации алгоритма удобно использовать очередь.

Реализация на C++ (с использованием очереди STL)

Результат выполнения
Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Задача поиска кратчайшего пути
Реализация на С++

Поиск в глубину – это алгоритм обхода вершин графа.

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

Отсутствие последнего свидетельствует об одной из двух возможных ситуаций:

Каждая вершина может находиться в одном из 3 состояний:

Фиолетовый – рассматриваемая вершина.
Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа
Применения алгоритма поиска в глубину

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

Реализация на C++ (с использованием стека STL)

Результат выполнения
Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа
Задача поиска лексикографически первого пути на графе.
Реализация на C++

Результат выполнения
Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа
Что такое список смежности графа. Смотреть фото Что такое список смежности графа. Смотреть картинку Что такое список смежности графа. Картинка про Что такое список смежности графа. Фото Что такое список смежности графа

Поиск в глубину также может быть реализован с использованием рекурсивного алгоритма.

Реализация обхода графа в глубину на C++ (с использованием рекурсии)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *