Практическая работа №17. Работа с графами
Практическая работа №17
Section titled “Практическая работа №17”Работа с графами
Section titled “Работа с графами”Цель работы
Section titled “Цель работы”- Изучить основные понятия теории графов
- Познакомиться со способами представления графов в памяти компьютера
- Реализовать алгоритмы обхода графа:
- DFS (поиск в глубину)
- BFS (поиск в ширину)
- Научиться использовать стек, очередь и рекурсию
1. Теоретические сведения
Section titled “1. Теоретические сведения”1.1 Что такое граф
Section titled “1.1 Что такое граф”Граф — это структура данных, состоящая из:
- вершин (узлов)
- рёбер (связей между вершинами)
Формально граф записывается так:
G = (V, E)где:
- V — множество вершин
- E — множество рёбер
Пример графа
Section titled “Пример графа”0 ---- 1| |2 ---- 32. Основные термимы
Section titled “2. Основные термимы”Путь — последовательность вершин, соединённых рёбрами.
Цикл — путь, который начинается и заканчивается в одной вершине.
Степень вершины — количество рёбер, связанных с вершиной.
Компонента связности — подграф, в котором существует путь между любой парой вершин.
3. Типы графов
Section titled “3. Типы графов”Неориентированный граф
Section titled “Неориентированный граф”A ---- BДвижение возможно в обе стороны.
Ориентированный граф
Section titled “Ориентированный граф”A → BДвижение возможно только по направлению стрелки.
Взвешенный граф
Section titled “Взвешенный граф”A --5--> BЧисло означает вес ребра (например расстояние).
4. Представление графа в памяти
Section titled “4. Представление графа в памяти”4.1 Матрица смежности
Section titled “4.1 Матрица смежности”Граф можно хранить в виде двумерного массива.
Если между вершинами i и j есть ребро:
A[i][j] = 1иначе:
A[i][j] = 0Пример
Section titled “Пример”| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 |
| 2 | 1 | 0 | 0 |
Память: O(N²)
4.2 Список смежности
Section titled “4.2 Список смежности”Каждая вершина хранит список своих соседей.
Пример:
0 → 1, 21 → 02 → 0Память: O(V + E)
5. Обход графа
Section titled “5. Обход графа”Основные алгоритмы обхода:
| Алгоритм | Использует |
|---|---|
| DFS | стек / рекурсия |
| BFS | очередь |
DFS — поиск в глубину
Section titled “DFS — поиск в глубину”Алгоритм:
- Начать с выбранной вершины
- Перейти к соседней вершине
- Продолжать движение вглубь
- Если дальше идти нельзя — вернуться назад
BFS — поиск в ширину
Section titled “BFS — поиск в ширину”Алгоритм:
- Начать с вершины
- Посетить всех соседей
- Затем соседей этих соседей
Используется очередь.
6. Практическое задание
Section titled “6. Практическое задание”Необходимо разработать консольную программу на C++, которая выполняет обход графа.
Граф необходимо хранить в виде матрицы смежности.
7. Исходный граф
Section titled “7. Исходный граф”Используйте следующий граф:
const int N = 7;
0 1 1 0 0 0 01 0 0 1 1 0 01 0 0 0 0 0 10 1 0 0 0 1 00 1 0 0 0 1 00 0 0 1 1 0 00 0 1 0 0 0 0Количество вершин: 7
8. Задание №1
Section titled “8. Задание №1”Реализуйте алгоритм DFS (поиск в глубину).
Требования:
- использовать стек
- вывести порядок обхода вершин
Пример вывода:
DFS обход графа:0 1 3 5 4 2 6(порядок может отличаться)
9. Задание №2
Section titled “9. Задание №2”Реализуйте алгоритм BFS (поиск в ширину).
Требования:
- использовать очередь
- вывести порядок обхода вершин
Пример вывода:
BFS обход графа:0 1 2 3 4 6 510. Дополнительное задание
Section titled “10. Дополнительное задание”Определите количество компонент связности в графе.
Подсказка:
- если вершина ещё не посещена
- запустите DFS
- увеличьте счётчик компонент
11. Тестовые данные для проверки
Section titled “11. Тестовые данные для проверки”Тест 1
Section titled “Тест 1”Граф:
0 - 1 - 2 - 3 - 4Ожидаемый DFS:
0 1 2 3 4Компоненты связности:
1Тест 2
Section titled “Тест 2”Граф:
0|1|2Ожидаемый DFS:
0 1 2Компоненты связности:
1Тест 3
Section titled “Тест 3”Несвязный граф:
0 - 1
2 - 3Ожидаемый DFS (с 0):
0 1Количество компонент:
2Тест 4
Section titled “Тест 4”Граф:
0 - 1 - 2|3Пример DFS:
0 1 2 312. Требования к программе
Section titled “12. Требования к программе”Программа должна:
- корректно реализовывать DFS
- корректно реализовывать BFS
- выводить порядок обхода
- использовать стек и очередь
- корректно компилироваться
13. Контрольные вопросы
Section titled “13. Контрольные вопросы”- Что такое граф?
- Какие элементы содержит граф?
- Чем ориентированный граф отличается от неориентированного?
- Что такое матрица смежности?
- Чем DFS отличается от BFS?
- Какие структуры данных используются в этих алгоритмах?