Опубликован: 02.02.2011 | Уровень: для всех | Доступ: свободно
Лекция 46:

Алгоритмы на графах. Алгоритмы нахождения кратчайшего пути

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

Лабораторная работа 45. Алгоритмы на графах. Алгоритмы нахождения кратчайшего пути

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

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

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

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

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

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

  1. На основании приведенной в лекции 45 функций реализуйте программы, в которых выполняются алгоритм Дейкстры и алгоритм Флойда.
  2. На основании приведенной в лекции функции реализуйте программу, в которой выполняется переборный алгоритм методом поиска в ширину.
  3. Оля (A), Маша (B), Витя (C), Дима (D), Ваня (E) и Катя (F) живут в разных городах. Стоимость билетов из разных городов известна (рис.). Добраться до городов можно разными способами. Определить наименьшую сумму, которую нужно потратить, чтобы Оля могла навестить каждого из своих друзей.

  4. Квадратное озеро задается матрицей MxN и покрыто мелкими островками. В левом верхнем углу находится плот размером mxm. За один шаг плот может передвигаться на одну клетку по вертикали или горизонтали. Требуется определить кратчайший путь плота до правого нижнего угла.
  5. Напишите алгоритм, находящий строку длиной 100 символов, состоящую только из букв "A", "B", "C", такую, что в ней никакие две соседние подстроки не равны друг другу. Воспользуйтесь перебором с возвратом.

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

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

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

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

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

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

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

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

  1. С какими видами графов работают алгоритмы Дейкстры, Флойда и переборные алгоритмы?
  2. Как от представления графа зависит эффективность алгоритма его обхода?
  3. За счет чего поиск в ширину является достаточно ресурсоемким алгоритмом?
  4. В чем преимущества алгоритмов обхода графа в ширину?
  5. Каким образом в алгоритме перебора с возвратом при обходе графа обрабатывается посещение тупиковых вершин?
  6. Поясните на примере обхода графа этап обратного хода в волновом алгоритме. Почему его удобно выполнять с конца?
  7. При программной реализации алгоритмов обхода графа с помощью рекурсии что выделяется в качестве базы и как организована декомпозиция?
< Лекция 45 || Лекция 46: 123 || Лекция 47 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

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

Спасибо!

Андрей Садовщиков
Андрей Садовщиков
Россия