Неориентированные графы 30. Граф - это двойка <V, E>, где V - непустое множество вершин, а Е множество ребер, связанные между соединяющих эти вершины попарно. собой ребром, равноправны, такие графы называются неориентированными: и нет Две вершины, именно поэтому никакой разницы между "началом" и "концом" ребра. Ориентированные графы Орграф - это граф, все ребра которого имеют направление. Такие направленные ребра называются дугами. На рисунках дуги изображаются стрелочками . В отличие от ребер, дуги соединяют две неравноправные вершины: одна из них называется началом дуги (дуга из нее исходит), вторая - концом дуги (дуга в нее входит). Можно сказать, что любое ребро - это пара дуг, направленных навстречу друг другу. Если в графе присутствуют и ребра, и дуги, то его называют смешанным. Все основные понятия, определенные для неориентированных графов (инцидентность, смежность, достижимость, длина пути и т.п.), остаются в силе и для орграфов - нужно лишь заменить слово "ребро" словом "дуга". А немногие исключения связаны с различиями между ребрами и дугами. Степень вершины в орграфе - это не одно число, а пара чисел: первое характеризует количество исходящих из вершины дуг, а второе - количество входящих дуг. Путь в орграфе - это последовательность вершин (без повторений), в которой любые две соседние вершины смежны, причем каждая вершина является одновременно концом одной дуги и началом следующей дуги. Взвешенные графы Взвешенный (другое название: размеченный) граф (или орграф) - это граф (орграф), некоторым элементам которого (вершинам, ребрам или дугам) сопоставлены числа. Наиболее часто встречаются графы с помеченными ребрами. Числа-пометки носят различные названия: вес, длина, стоимость. Замечание: Обычный (не взвешенный) граф можно интерпретировать как взвешенный, все ребра которого имеют одинаковый вес 1. Длина пути во взвешенном (связном) графе - это сумма длин (весов) тех ребер, из которых состоит путь. Расстояние между вершинами - это, как и прежде, длина кратчайшего пути. 31. Способы представления графов Матрица смежности Матрица смежности Sm - это квадратная матрица размером NxN (N количество вершин в графе), заполненная единицами и нулями по следующемуправилу: Если в графе имеется ребро e, соединяющее вершины u и v, то Sm[u,v] = 1, в противном случае Sm[u,v] = 0. Заметим, что данное определение подходит как ориентированным, так и неориентированным графам: матрица смежности для неориентированного графа будет симметричной относительно своей главной диагонали, а для орграфа несимметричной. - Задать взвешенный граф при помощи матрицы смежности тоже возможно. Необходимо лишь внести небольшое изменение в определение: Если в графе имеется ребро e, соединяющее вершины u и v, то Sm[u,v] = ves(e), в противном случае Sm[u,v] = 0. Это хорошо согласуется с замечанием, сделанным в предыдущем пункте: невзвешенный граф можно интерпретировать как взвешенный, все ребра которого имеют одинаковый вес 1. Небольшое затруднение возникнет в том случае, если в графе разрешаются ребра с весом 0. Тогда придется хранить два массива: один с нулями и единицами, которые служат показателем наличия ребер, а второй - с весами этих ребер. В качестве примера приведем матрицы смежности для трех графов, изображенных на. Таблица. Примеры матриц смежности abcd f 12345 a b c d a 0 1 1 0 0 1 0 1 0 1 0 a 0 1 10 0 b 1 0 1 1 1 2 0 0 0 0 0 b 1 0 2 10 c 1 1 0 1 1 3 1 1 0 0 1 c 10 2 0 3 d 0 1 1 0 1 4 0 0 1 0 0 d 0 10 3 0 f 0 1 1 1 0 50 0 0 0 0 Удобство матрицы смежности состоит в наглядности и прозрачности алгоритмов, основанных на ее использовании. А неудобство - в несколько завышенном требовании к памяти: если граф далек от полного, то в массиве, хранящем матрицу смежности, оказывается много "пустых мест" (нулей). Кроме того, для "общения" с пользователем этот способ представления графов не слишком удобен: его лучше применять только для внутреннего представления данных. 32.Формы представления графов. Матрица инцидентности Матрица I(G) размером n x m (n - число вершин, m - число ребер/дуг графа G), (i,j)-й элемент, которой равен 1, если вершина ni инцидентна ребру eij в неориентированном графе или если ni есть начало дуги ej равен -1, если вершина ni есть конец дуги ej (только для ориентированных графов), и равен 0 в остальных случаях. В данной задаче задается граф и строится его матрица инцидентности: //Построение матрицы инцидентности #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <iostream.h> struct elem { int num; /* Номер вершины */ int suns; /* Количество сыновей */ char str[20]; /* Строка с номерами сыновей */ elem *next; /* Указатель на следующую вершину */ 33.Формы представления графов. Списки смежности. Списки смежности Этот способ задания графов подразумевает, что для каждой вершины будет указан список всех смежных с нею вершин (для орграфа - список вершин, являющихся концами исходящих дуг). Конкретный формат входного файла, содержащего списки смежности, необходимо обговорить отдельно. Например, в нашем случае начальная вершина отделена от списка смежности двоеточием: <номер_начальной_вершины>: <номера_смежных_вершин> Наиболее естественно применять этот способ для задания орграфов, однако и для остальных вариантов он тоже подходит. В качестве примера приведем списки смежности, задающие все те же три графа, изображенные на. Таблица 11.10. Примеры списков смежности a: b c 1: 2 4 b: a 1 c 2 d 10 b: c d f 3: 1 2 5 c: a 10 d 3 c: d f 4: 3 d: f