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

Построим матрицу минимальных расстояний D графа G2.
Длина минимального маршрута из вершины 1 в вершину 2 равна 1 (элемент матрицы D - d1,2). Длина минимального маршрута из вершины 1 в вершину 3 равна 2 (элемент матрицы D - d1,3).
Аналогично строятся все остальные элементы матрицы D.
Элементы главной диагонали матрицы равны нулю, т.к. длина пути из любой вершины в саму себя равна 0.


Выберем максимальные элементы из каждой строки и запишем их в вектор F.
Максимальный элемент вектора F - диаметр графа G2, равен 3,
D(G2) = 3.
Минимальный элемент вектора F - радиус графа G2, равен 2,
r(G2) = 2.
Если fi = r(G2), то вершина i - центр графа. Тогда центрами графа G2 являются вершины 3 и 4.
Возможно ли нарисовать граф G2 не отрывая руки от бумаги? Обоснуйте ответ. Если возможно, запишите произвольный эйлеров цикл или цепь.
Занумеруем произвольным образом вершины графа G2.

Граф можно нарисовать не отрывая руки от бумаги, и не обводя дважды ни одно из ребер, если выполняется одно из двух условий. По теореме Эйлера, в графе можно выделить эйлеров цикл, если степени всех вершин графа четные. Либо, если в графе ровно 2 вершины с нечетной степенью, то в графе можно построить эйлерову цепь.
Рассчитаем степени всех вершин графа:
(1) = 2; (2) = 2; (3) = 3; (4) = 3; (5) = 2; (6) = 2.
Т. к. в графе ровно 2 вершины с нечетной степенью (вершины 3 и 4), то по теореме Эйлера в графе можно выделить эйлерову цепь.
Построим эйлерову цепь. Начнем обводить граф с любой из вершин с нечетной степенью. Пусть это будет вершина 3. Тогда эйлерова цепь может быть записана следующим маршрутом:
E = (3, 2, 1, 4, 5, 6, 3, 4).
Продемонстрируйте алгоритм Форда для нахождения кратчайшего пути из вершины 1 в вершину 3, на графе, матрица весов которого:
(нарисуйте
граф по матрице весов)
Элементы матрицы весов формируются следующим образом:

Исходя из этого определения построим граф по матрице весов:

Рассмотрим
работу алгоритма Форда на примере
построения кратчайшего пути из вершины
в вершину
.
Разметим все вершины графа следующим
образом: начальной вершине пути поставим
метку [0], всем остальным вершинам поставим
метки []
(рис. 1-а). Далее будем просматривать, все
дуги графа, пока не найдется хотя бы
одна дуга (x,
y),
такая что:
MV(y) > MV(x) + Вес(x, y) (1)
Если такая дуга (x, y) нашлась, то MV(y) := MV(x) + Вес(x, y).
Рассмотрим
дугу (
).MV(
)
>MV(
),
по условию (1)
MV(
)
:=MV(
)
+ Вес(
)
(рис. 1-б). Проверим все остальные дуги
на выполнение условия (1) (рис. 1 в-ж ). На
рис. 1-ж показана окончательная разметка
вершин графа. Т.е. не осталось ни одной
дуги, удовлетворяющей условию (1). Прямой
ход алгоритма на этом закончен.










Рис. 1. Поиск кратчайшего пути на нагруженном орграфе.
Обратный ход алгоритма строит путь между заданными вершинами. Будем считать конечную вершину пути текущей (рис. 1-ж), обозначим ее за z. На рисунке текущая вершина выделена.
Следующую вершину минимального маршрута будем искать по условию:
Вершина x смежна с z и MV(x) = MV(z) - Вес(x, z) (2)
Условию
(2) удовлетворяет вершина
,
перейдем к вершине
(рис. 1-з).
Следуюшие
вершины будем искать по условию (2), пока
не дойдем до начальной вершины пути
(рис. 1-к). Минимальный путь из вершины
в вершину
:M
=
.
Алгоритм Форда записанный на псевдокоде приведен на рис. 2.
Обозначения,
использованные в алгоритме: a
- начальная
вершина, b
- конечная
вершина пути,
MV
- массив меток ребер
НАЧАЛО {Разметка
вершин} MV(a):=0;
{Вершина a - начало пути } ЦИКЛ
(для всех x из X\(a)) {Все остальные вершины
пометить} MV(x):=MaxInt;
{максимальным числом} ВСЕ_ЦИКЛ ЦИКЛ_ПОКА
(найдется (x, y) из X,
такая
что MV(y) - MV(x) > ВЕС(x, y)) MV(y):=
min(MV(y),
MV(x)+ВЕС(x,
y)); ВСЕ_ЦИКЛ {По
окончании разметки вешины размечены
так, что} {
для всех (x, y) MV(y) - MV(x)
ВЕС(x, y)}
{Построение
пути} k:=MV(b);
{Метка вершины b равна длине
пути} ПУТЬ(k):=b; ЦИКЛ_ПОКА
(ПУТЬ(k)a) z:=ПУТЬ(k); ЕСЛИ
(СОСЕД(x, z) И
(MV(z) - MV(x) = ВЕС(x, z))) ТО
ПУТЬ(k-1):=x; k:=k-1; ВСЕ_ЦИКЛ ВЫВОД
ПУТЬ(k), k=0, 1,...,MV(b);
КОНЕЦ
рис. 2. Кратчайший путь на нагруженном орграфе из вершины a в вершину b (алгоритм Форда)
Функция проверки смежности вершин СОСЕД(x, y) записанная на псевдокоде приведена на рис. 3.
ФУНКЦИЯ
СОСЕД(x, y) : БУЛЕВА ЕСЛИ
(x смежна y) ТО
СОСЕД(x, y):=ИСТИНА ИНАЧЕ
СОСЕД():=ЛОЖЬ ВСЕ_ЕСЛИ Конец
(СОСЕД)
рис. 3. Функция проверки смежности
Найдите цикломатическое число графа G2. Постройте остовное дерево графа G2. Постройте базис из независимых циклов графа G2. Проставьте произвольную ориентацию ребер графа и постройте вектор-циклы для циклов из базиса. Постройте цикломатическую матрицу графа G2.
Пронумеруем вершины графа G2 в произвольном порядке.

Рис. 1. Граф G2.
Цикломатическое число графа (G2) = m - n + k(G2).
В графе G2 число вершин n = |X| = 6, число ребер m = |V| = 7, граф связный, следовательно, число компонент связности - k(G2) = 1. Тогда цикломатическое число графа (G2) = 7 - 6 +1 = 2.
Построим остовное дерево графа. Из исходного графа для получения остовного дерева необходимо удалить ровно (G2) = 2 ребра.
Построим остовное дерево, используя алгоритм обхода графа в “ширину”. Начнем обход с вершины x1. Поставим вершине x1 метку [0]. Всем остальным вершинам метки [-1] (рис. 2). Вершине x1 смежны вершины x2, x4. Меткам вершин x2, x4 присвоим значение [1].
Запишем в дерево ребра (x1, x2), (x1, x4). Найдем вершины смежные вершинам x2, x4 метки которых равны [-1]. Это вершины x3 и x5 смежные вершинам x2 и x4 соответственно. Меткам вершин x3 и x5 присвоим значение [2]. Ребра (x2, x3) и (x4, x5) запишем в дерево.
Найдем вершины смежные вершинам x3, x5 метки которых равны [-1]. Это вершина x6 смежная вершине x5. Метке вершины x6 присвоим значение [3]. Ребро (x5, x6) запишем в дерево.
Построение остовного дерева закончено, т.к. были отмечены все вешины.
Построенное дерево выделено жирной линией на рис. 2.

Рис. 2. Остовное дерево графа G2.
Используем построенное остовное дерево для построения базиса из независимых циклов.
Теорема 5.8. Количество циклов, составляющих базис графа, равно цикломатическому числу графа.
По теореме 5.8. базис графа G2 состоит из двух циклов. Построим их.
Добавим
в остовное дерево графа G2
ребро (x3,
x4).
Включим это ребро в простой цикл
.
Добавим следующее удаленное ребро (x3,
x6)
и построим цикл, в который ребро (x3,
x6)
входит, а ребро
(x3,
x4)
не входит
.
Циклы
и
составляют базис из независимых циклов.
Проставим произвольную ориентацию ребер графа G2 (рис. 3).

Рис. 3. Ориентация ребер графа G2.
Для
выбранной ориентации вектор-циклы,
соответствующие циклам
,
:
![]()
Составим цикломатическую матрицу графа:
