Лабораторная работаПрограммированиеГод: 2025ТУСУР: Томский государственный университет систем управления и радиоэлектроники
👁 17💼 0

Готовая лабораторная: Стягивающее дерево методом BFS

Загружена: 19.02.2026 11:22

Построение стягивающего дерева неориентированного графа методом поиска в ширину. Включает реализацию на C++ с представлением графа через матрицу инцидентности/смежности, чтение из файла graph.txt и вывод рёбер дерева. Практическая ценность — готовый исходник для лабораторных и демонстрации работы BFS.

Содержание

1 Тема работы : 
Тема работы — построение стягивающего дерева неориентированного графа методом поиска в ширину (BFS), при этом граф задан матрицей инцидентности. Работа включает реализацию алгоритма, обработку входных данных и вывод рёбер дерева.
2 Цель работы :
Цель лабораторной работы № 2 — получить практические навыки представления графов в памяти ЭВМ, реализовать на языке программирования C/C++ алгоритмы работы с графами. 
3 Индивидуальное задание : 
Построить стягивающее дерево неориентированного графа методом поиска в ширину и вывести список рёбер дерева. Граф задан в текстовом файле матрицей инциденций.

Подробное описание

📘 О чем эта работа

Лабораторная работа посвящена построению стягивающего (остовного) дерева неориентированного графа методом поиска в ширину (BFS). Объект — неориентированный граф, представленный в виде матрицы (adjMatrix/матрица инцидентности); предмет — реализация обхода графа и формирование списка рёбер стягивающего дерева с выводом в формате (u, v).

📚 Что внутри

В отчете и приложении содержится конкретная исходная структура и программный код, а также пример входного файла и результат выполнения программы:

  • Листинг на C++: класс Graph с полями vertices и adjMatrix, методы addEdge(int u, int v) и BFS(int startVertex), обработка ошибок при чтении и добавлении рёбер.
  • Формат входа: текстовый файл 'graph.txt' — первая строка число вершин, далее пары 'u v' по одному ребру на строку (в отчёте пример: 5, затем 0 1, 0 2, 1 2, 1 3, 2 4).
  • Пример вывода: список рёбер стягивающего дерева в формате '(u, v)' — в примере получены (0,1), (0,2), (1,3), (2,4).
  • Алгоритм и пояснения: пошаговое применение BFS с очередью, пометка посещённых вершин и добавление рёбер дерева при первом посещении вершины.
  • Выводы и рекомендации: проверка корректности входных данных, обработка ошибок открытия файла и диапазона индексов вершин.

📊 Для кого подходит

Материал полезен студентам и преподавателям дисциплин по структурам данных и алгоритмам, направлениям «Программная инженерия» и «Компьютерные науки». Подойдёт для выполнения лабораторных работ, демонстрации работы BFS и как шаблон для дальнейшей модификации на C++.

✨ Особенности

Важные практические детали: используемая в листинге реализация хранит граф в виде квадратной матрицы adjMatrix — это упрощает добавление рёбер и симметричную обработку неориентированного графа, но делает BFS обход по вложенному циклу и полученную сложность порядка O(V^2) при проверке всех соседей. В тексте также показан готовый пример входного файла graph.txt и реальный выход программы, присутствуют проверки на неверное количество вершин и исключения при некорректных индексах.

Легко адаптируется: рекомендуется заменить матрицу на список смежности для экономии памяти и улучшения сложности до O(V+E) при разреженных графах; также можно расширить обработку форматов ввода или добавить проверку связности графа.

❓ Частые вопросы

Подойдет ли для моего ВУЗа?
Структура отчёта соответствует стандартным требованиям: цель, алгоритм, листинг, пример входа/выхода и выводы — легко адаптируется под локальные инструкции кафедры.

Можно ли использовать код как шаблон?
Да. Листинг содержит полнофункциональный пример на C++ с классом Graph, методом addEdge и BFS, его можно запускать как есть при наличии файла graph.txt и дорабатывать под дополнительные условия (ориентированность, веса, проверка связности).

Технические детали, упомянутые в работе: чтение из файла (ifstream), использование vector> для матрицы, queue для реализации BFS, обработка исключений (out_of_range) при добавлении рёбер, вывод рёбер стягивающего дерева в консоль.

Документ содержит все необходимые элементы для выполнения и защиты лабораторной: постановку цели, алгоритм решения, пример входных данных и оформленный листинг на C++. Это делает материал удобным для студентов, которым нужно быстро получить работоспособный код и понять принцип формирования остовного дерева методом поиска в ширину.