![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Поиски вершин в графах. Поиск в глубину.Содержание книги
Поиск на нашем сайте
При решении многих задач как для ориентированных, так и для неориентированных графов, необходим эффективный метод систематического обхода вершин графа. На практике применяется два принципиально различных порядка обхода, основанные на поиске в глубину. Начнем рассмотрение поиска в глубину. Сначала пометим все вершины графа, как непосещенные. Поиск в глубину начинается с произвольной вершины графа, например с первой, обозначим ее v. При этом значение метки v меняется на противоположное (вершина уже посещалась). Затем, для каждой вершины, смежной с v, которая ранее не посещалась, рекурсивно вновь применяется поиск в глубину. Легко показать, что при этом все вершины, достижимые из начальной, то есть образующие одну компоненту связности, будут пройдены. Если некоторые вершины оказались непройденными, то граф не связан. Для полного его обхода выбираем любую еще непосещенную вершину и поиск продолжается. Очевидно, что таким образом можно не только проверять связность графа, но и подсчитывать количество компонент связности. Приведем процедуру поиска в глубину и фрагмент основной программы, решающей эту задачу. Считаем, что граф задан с помощью матрицы булевской матрицы смежности a (см. предыдущую лекцию), а метятся вершины графа с помощью массива vert: array[1..nmax] of boolean. procedure d_f_s(v:byte); var i:byte; begin { writeln(v); или другая обработка вершины v} vert[v]:=false;{вершина посещена} for i:=1 to n do if a[v,i] and vert[i] then d_f_s(i) end; begin …{заполняем матрицу смежности} {метим все вершины как непосещенные} fillchar(vert,sizeof(vert),true); cnt:=0;{счетчик компонент связности} for i:=1 to n do if vert[i] then begin inc(cnt); d_f_s(i) end; writeln(cnt) end. Подсчитаем вычислительную сложность предложенной реализации алгоритма. Так как для каждой вершины процедура d_f_s вызывается ровно один раз, а количество операций в ней пропорционально N — количеству вершин в графе, то количество операций в алгоритме есть O (N 2), а его применимость ограничена лишь размером памяти, необходимой для представления матрицы смежности. Ниже будет приведена и более эффективная реализация данного алгоритма. Поиск в глубину При решении многих задач, касающихся ориентированных графов, необходим эффективный метод систематического обхода вершин и дуг орграфов. Таким методом является метод поиск в глубину. Метод поиска в глубину является основой многих эффективных алгоритмов работы с графами. Предположим, что есть ориентированный граф Метод получил свое название - поиск в глубину, поскольку поиск не посещенных вершин идет в направлении вглубь до тех пор, пока это возможно. Например, пусть Лекция № 9
|
||||
Последнее изменение этой страницы: 2017-02-07; просмотров: 236; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.27 (0.008 с.) |