Теоретические сведения
1. Построение эйлерова цикла.
Эйлеровым циклом называется замкнутый маршрут (путь) в графе, проходящий через каждое его ребро (дугу) точно один раз.
Необходимым и достаточным условием существования эйлерова цикла в неориентированном графе является связность графа и чётность степеней всех вершин графа. Если это условие выполнено, то построить эйлеров цикл можно с помощью следующего алгоритма, который полностью повторяет доказательство достаточности теоремы. В алгоритме используются обозначения:
C – вспомогательный стек;
CE – результирующий стек, содержащий эйлеров цикл;
– начальная вершина цикла.
{
;
;
;
;
while (
)
{
;
if(
)
{
;
;
;
;
;
}
else {
;
; }
}
}
Построение цикла начинается с произвольной начальной вершины, которая заносится в промежуточный стек. Далее, пока стек C не пуст, выполняется обработка его верхушки v. Если список вершины, являющейся верхушкой стека, не пуст (что означает наличие ребра, инцидентного v), то вершина списка u заносится в промежуточный стек, а ребро
удаляется из графа. В противном случае вершина v переносится из промежуточного стека в результирующий.
После окончания работы алгоритма стек CE содержит эйлеров цикл.
2. Построение гамильтонова цикла.
Так как не существует необходимого и достаточного условия гамильтоновости графа, то вопрос о существовании гамильтонова цикла решается после попытки его построения. Для построения такого цикла воспользуемся вариантом алгоритма с возвратом, который использует механизм рекурсии.
Построение цикла начинается с произвольной начальной вершины
.
Обозначим:
x – массив, содержащий гамильтонов цикл;
Dop – массив логических переменных, означающих возможность использования вершины в цикле.
Gamilt ( k )
{ for(
)
if ( (
) Ù (
) )вывод массива x и
;
else if (
)
{
;
;
Gamilt ( k +1);
;
}
}
{for(
)
;
;
;
Gamilt (2);
}
Данный алгоритм выводит все существующие гамильтоновы циклы графа.
Дата добавления: 2017-02-20; просмотров: 269;
