Опубликован: 02.02.2011 | Доступ: свободный | Студентов: 3318 / 935 | Оценка: 4.43 / 3.57 | Длительность: 33:06:00
Специальности: Программист
Лекция 45:

Алгоритмы на графах. Алгоритмы обхода графа

< Лекция 44 || Лекция 45: 123 || Лекция 46 >

Лабораторная работа 44. Алгоритмы на графах. Алгоритмы обхода графа

Цель работы: изучить основные алгоритмы обхода графа и научиться решать задачи обхода графа на основе поиска в ширину и поиска в глубину.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные, выполняет их обработку в соответствии с требованиями задания и выводит результат на экран. Для обработки данных необходимо реализовать алгоритмы обхода графа в соответствии с постановкой задачи. Ввод данных осуществляется из файла с учетом требований к входным данным, содержащихся в постановке задачи. Ограничениями на входные данные является допустимый диапазон значений используемых числовых типов в языке С++.

Теоретические сведения.

Ознакомьтесь с материалом лекции 44.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. На основании приведенной в лекции 44 функции реализуйте программу, в которой выполняется алгоритм обхода графа на основе поиска в глубину.
  2. На основании приведенной в лекции 44 функции реализуйте программу, в которой выполняется алгоритм обхода графа на основе поиска в ширину.
  3. Используйте обход графа в ширину для определения всех вершин графа, находящихся на фиксированном расстоянии d от данной вершины.
  4. Перенумеруйте вершины графа в порядке обхода в глубину и вычислите среднюю плотность графа как частное от деления количества его ребер на число вершин. Можно ли оба эти действия выполнить за один обход графа?
  5. В вершинах неориентированного графа хранятся положительные целые числа. Подсчитайте количество пар дружественных чисел в вершинах графа, которые соединены ребрами.

Указания к выполнению работы.

Каждое задание необходимо решить в соответствии с изученными алгоритмами обхода графа, реализовав программный код на языке С++. Рекомендуется воспользоваться материалами лекции 44, где подробно рассматриваются описания алгоритмов обхода графа, примеры разработки функций, реализующих алгоритмы обхода графа, на языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя функции. Этапы решения сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи, представить результаты тестирования программ.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. Как связаны между собой различные способы представления графов?
  2. Как от вида или представления графа зависит временная сложность алгоритмов поиска в глубину и в ширину?
  3. Как при реализации в коде выполняется возвращение из тупиковых вершин при обходе графа?
  4. Как выполняется обход в несвязном графе?
  5. Распространяются ли понятия "поиск в глубину" и "поиск в ширину" на несвязный граф? Ответ обоснуйте.
  6. Охарактеризуйте трудоемкость рекурсивного и нерекурсивного алгоритмов обхода графа.
< Лекция 44 || Лекция 45: 123 || Лекция 46 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!