- •Билет 1
- •Билет 2
- •Способы представления графов
- •Билет 3
- •Билет 4
- •Билет 5
- •Билет 6
- •Билет 7
- •Основы визуального программирования
- •Билет 8
- •Обменная сортировка.
- •Конструкторы и деструкторы
- •Билет 9
- •Билет 10
- •Статическое и динамическое распределение памяти. Понятие указателя.
- •Процедуры и функции модуля graph.
- •Билет 11
- •Доступ к системным ресурсам в операционной системе pc-dos
- •Билет 12
- •Билет 13
- •Билет 14
- •Билет 15
- •Алгоритм генерирования перестановок с минимальным числом транспозиций
- •1. Введение в теорию графов. Способы представления графов: матрицы смежности и инцидентности, списки инцидентностей, списки ребер.
- •2. Функции библиотеки dos. Прерывания. Обработка прерываний.
- •Связные компоненты графа. Деревья. Бинарное дерево как связный граф без циклов
- •2.Сортировка вставками
- •2)Итерационные циклы
- •1.Эйлеровы пути в графе.
- •2.Ввод-вывод с помощью текстовых файлов.
- •Алгоритм Дейкстры (Dijkstra)
- •Вопрос 1.
- •Вопрос 2.
- •Создание и обработка одномерных динамических массивов.
- •Операторы цикла.
- •2.Сортировка распределением
- •1)Односвязные линейные списки
- •2) Записи. Организация, размещение. Записи с вариантами.
- •1.Алгоритмы с возвратом, их реализация с помощью рекурсий и с использованием стека. Гамильтоновы циклы.
Связные компоненты графа. Деревья. Бинарное дерево как связный граф без циклов
Упорядоченное дерево — это дерево, у которого ветви, исходящие из каждой вершины, упорядочены по определенному критерию. Поэтому два упорядоченных дерева на рис. 9.3 — это разные, отличные друг от друга, структуры.
Рис. 9.3. Два различных бинарных дерева
Упорядоченные деревья второй степени (m-арные при m=2) называют двоичными или бинарными деревьями. Упорядоченное бинарное дерево можно определить как множество элементов (вершин), которое либо пусто, либо состоит из корня с двумя отдельными двоичными деревьями, которые называют левым и правым поддеревьями этого корня. Деревья степени больше двух называют сильно ветвящимися деревьями (multiway trees).
При представлении бинарного дерева в виде связного списка каждый элемент может содержать поля данных и два структурных указателя: указатель левого (left) сына и указатель правого (right) сына. Таким образом, элементы бинарного дерева могут иметь такой тип:
Type Pt = ^Node;
Node = Record
Key : Char;
Left, Right : Pt;
End;
Где Kеу — это поле идентифицирующего элемент ключа; Left и Right — поля для структурных указателей.
Граф без циклов называется лесом. Вершины степени 1 в дереве называются листьями.
Связным компонентом неориентированного графа называется максимальное множество вершин таких, что существует путь между любой парой вершин. Они являются различными, не соединенными "кусками" графа.
Большое количество с виду сложных задач сводится к нахождению или подсчету связных компонент.Связные компоненты легко могут быть найдены с помощью поиска в глубину или поиска в ширину, так как порядок вершин не важен. Обычно мы начинаем с первой вершины. Все, что мы откроем во время этого поиска, должно являться частью одного и того же связного компонента. Далее мы повторяем поиск, начиная с одной из неоткрытых вершин (если таковые существуют), чтобы обнаружить следующий компонент, и так далее до тех пор, пока не будут обнаружены все вершины.
2.Сортировка вставками
Метод сортировки вставками заключается в переборе всех элементов массива от первого до последнего и вставке каждого очередного элемента на место среди предшествующих ему элементов, упорядоченных ранее таким же способом. Поскольку процесс начинается с самого первого элемента, то последовательность упорядоченных элементов постепенно растет до тех пор, пока самый последний элемент не встанет на "свое" место. Освобождение места для вставки элемента осуществляется путем соответствующего сдвига группы элементов.
Данный алгоритм также обладает слишком низким быстродействием.
procedure Vstavka;
var
z, y, i, j : integer;
begin
for i := 2 to n do
for j := 1 to i-1 do
if X[j] > X[i] then
begin
z := x[i];
for y := i downto j+1 do x[y] := x[y-1];
x[j] := z
end
end;
Билет №18
Поиск в глубину графа
Поиск в глубину (англ. Depth-first search, DFS) — один из методов обхода графа. Алгоритм поиска описывается следующим образом: для каждой непройденной вершины необходимо найти все не пройденные смежные вершины и повторить поиск для них. Используется в качестве подпрограммы в алгоритмах поиска одно- и двусвязных компонент, топологической сортировки.
Алгоритм поиска в глубину.Пусть задан граф G=(V,E), где V— множество вершин графа, E— множество ребер графа. Предположим, что в начальный момент времени все вершины графа окрашены в белый цвет. Выполним следующие действия:
Из множества всех белых вершин выберем любую вершину, обозначим её u1.
Выполняем для неё процедуру DFS(u1).
Повторяем шаги 1-3 до тех пор, пока множество белых вершин не пусто.
Процедура DFS (параметр — вершина uԑV )
Перекрашиваем вершину u в черный цвет.
Для всякой вершины w, смежной с вершиной u и окрашенной в белый цвет, выполняем процедуру DFS(w).
Пример реализации:
const
MAX_N = 10;
var
graph: array [1..MAX_N, 1..MAX_N] of boolean; // массив для определения графа
visited: array [1..MAX_N] of boolean;
procedure dfs(v: integer);
var
i: integer;
begin
visited[v] := true;
for i := 1 to MAX_N do
if graph[v, i] and not visited[i] then
dfs(i);