Цель лекции: изучить основные алгоритмы
Теория графов в последнее время широко используется в различных отраслях науки и техники. Быстрое развитие данная теория получила с созданием электронно-вычислительной техники, которая позволяла решить многие задачи
Граф – это совокупность двух конечных множеств: множества точек и множества линий, попарно соединяющих некоторые из этих точек. Множество точек называется вершинами (узлами) графа. Множество линий, соединяющих вершины графа, называются ребрами (дугами) графа.
Ориентированный граф (орграф) – граф, у которого все
Неориентированный граф (неорграф) – граф, у которого все
Смешанный граф – граф, содержащий как ориентированные, так и неориентированные
Петлей называется
Простой граф – это граф, в котором нет ни петель, ни кратных ребер.
Мультиграф – это граф, у которого любые две вершины соединены более чем одним
Маршрутом в графе называется конечная чередующаяся последовательность смежных вершин и ребер, соединяющих эти вершины.
Маршрут называется открытым, если его начальная и конечная вершины различны, в противном случае он называется замкнутым.
Маршрут называется цепью, если все его
Замкнутая цепь называется циклом, если различны все ее вершины, за исключением концевых.
Граф называется связным, если для любой пары вершин существует соединяющий их путь.
Вес вершины – число (действительное, целое или рациональное), поставленное в соответствие данной вершине (интерпретируется как стоимость,
Взвешенный граф – граф, каждому ребру которого поставлено в соответствие некое значение (вес
Выбор структуры данных для хранения графа в памяти компьютера имеет принципиальное значение при разработке
Пусть задан граф (например, рис 44.1), у которого количество вершин равно n, а количество ребер – m. Каждое

(рис 44.2) Граф(рис 44.1) Список ребер графаСуществует много алгоритмов на графах, в основе которых лежит систематический перебор
Под обходом графов (поиском на графах) понимается процесс
При решении многих задач, использующих графы, необходимы эффективные методы регулярного обхода вершин и ребер графов. К стандартным и наиболее распространенным методам относятся:
Эти методы чаще всего рассматриваются на
При
Таким образом, основная идея поиска в глубину – когда возможные пути по
Алгоритм поиска в глубину
Шаг 1. Всем вершинам графа присваивается значение не посещенная. Выбирается первая вершина и помечается как посещенная.
Шаг 2. Для последней помеченной как посещенная вершины выбирается смежная вершина, являющаяся первой помеченной как не посещенная, и ей присваивается значение посещенная. Если таких вершин нет, то берется предыдущая помеченная вершина.
Шаг 3. Повторить шаг 2 до тех пор, пока все вершины не будут помечены как посещенные (рис 44.5).
(рис 44.5) Демонстрация алгоритма поиска в глубину//Описание функции алгоритма поиска в глубину
void Depth_First_Search(int n, int **Graph, bool *Visited,
int Node){
Visited[Node] = true;
cout << Node + 1 << endl;
for (int i = 0 ; i < n ; i++)
if (Graph[Node][i] !Visited[i])
Depth_First_Search(n,Graph,Visited,i);
}
Также часто используется нерекурсивный алгоритм поиска в глубину. В этом случае рекурсия заменяется на стек. Как только вершина просмотрена, она помещается в стек, а использованной она становится, когда больше нет новых вершин, смежных с ней.
Временная сложность зависит от представления графа. Если применена O(n2), а если нематричное представление – O(n+m): рассматриваются все вершины и все
При
Таким образом, основная идея
Алгоритм поиска в ширину
Шаг 1. Всем вершинам графа присваивается значение не посещенная. Выбирается первая вершина и помечается как посещенная (и заносится в очередь).
Шаг 2. Посещается первая вершина из очереди (если она не помечена как посещенная). Все ее соседние вершины заносятся в очередь. После этого она удаляется из очереди.
Шаг 3. Повторяется шаг 2 до тех пор, пока очередь не пуста (рис 44.6).
(рис 44.6) Демонстрация алгоритма поиска в ширину//Описание функции алгоритма поиска в ширину
void Breadth_First_Search(int n, int **Graph,
bool *Visited, int Node){
int *List = new int[n]; //очередь
int Count, Head; // указатели очереди
int i;
// начальная инициализация
for (i = 0; i < n ; i++)
List[i] = 0;
Count = Head = 0;
// помещение в очередь вершины Node
List[Count++] = Node;
Visited[Node] = true;
while ( Head < Count ) {
//взятие вершины из очереди
Node = List[Head++];
cout << Node + 1 << endl;
// просмотр всех вершин, связанных с вершиной Node
for (i = 0 ; i < n ; i++)
// если вершина ранее не просмотрена
if (Graph[Node][i] !Visited[i]){
// заносим ее в очередь
List[Count++] = i;
Visited[i] = true;
}
}
}
Сложность O(n+m), ибо рассматриваются все n вершин и m ребер. Использование O(n2)
Вес (длина) ребра – это число или несколько чисел, которые интерпретируются по отношению к ребру как длина,
Вес вершины – это число (действительное, целое или рациональное), поставленное в соответствие данной вершине.
Взвешенный граф – это граф, каждому ребру которого поставлен в соответствие его вес.
Граф – это совокупность двух конечных множеств: множества точек и множества линий, попарно соединяющих некоторые из этих точек.
Вершины (узлы) графа – это множество точек, составляющих граф.
Замкнутый маршрут – это маршрут в графе, у которого начальная и конечная вершины совпадают.
Кратные ребра – это
Маршрут в графе – это конечная чередующаяся последовательность смежных вершин и ребер, соединяющих эти вершины.
Матрица инцидентности – это
Матрица смежности – это
Мультиграф – это граф, у которого любые две вершины соединены более чем одним
Неориентированный граф (неорграф) – это граф, у которого все
Обход графа (поиск на графе) – это процесс
Ориентированный граф (орграф) – это граф, у которого все
Открытый маршрут – это маршрут в графе, у которого начальная и конечная вершины различны.
Петля – это
Поиск в глубину – это
Поиск в ширину – это
Простой граф – это граф, в котором нет ни петель, ни кратных ребер.
Путь – это открытая цепь, у которой все вершины различны.
Ребра (дуги) графа – это множество линий, соединяющих вершины графа.
Связный граф – это граф, у которого для любой пары вершин существует соединяющий их путь.
Смежные вершины – это вершины, соединенные общим
Смешанный граф – это граф, содержащий как ориентированные, так и неориентированные
Список ребер – это множество, образованное парами смежных вершин
Тупик – это вершина графа, для которой все смежные с ней вершины уже посещены
Цепь – это маршрут в графе, у которого все
Цикл – это замкнутая цепь, у которой различны все ее вершины, за исключением концевых.
Цель работы: изучить основные алгоритмы
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные, выполняет их обработку в соответствии с требованиями задания и выводит результат на экран. Для обработки данных необходимо реализовать алгоритмы
Теоретические сведения.
Ознакомьтесь с материалом лекции 44.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
d от данной вершины.Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными алгоритмами
Следует реализовать каждое задание в соответствии с приведенными этапами:
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
Контрольные вопросы
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.