Введение
1 Анализ требований и разработка проекта
1.1 Постановка задачи
1.2 Описание структуры входных и выходных данных
1.3 Разработка алгоритма решения задачи
1.4 Интерфейс пользователя системы
1.5 Определение формы представления входных и выходных данных
1.6 Разработка структуры программы
2 Разработка программы
2.1 Обоснование выбора среды программирования
2.2 Программирование и отладка
2.3 Формирование тестовых данных
2.4 Тестирование программы
3 Разработка программной документации
3.1 Правила пользования программным средством
3.2 Технические требования
Заключение
Список использованных источников
Приложение A. Текст программы
ВВЕДЕНИЕ
Теория графов представляет собой один из наиболее важных и интересных, но в то же время один из самых сложных и непонятных разделов в информатике. Круг задач, решаемый при помощи теории графов, очень обширный, что делает актуальным применение алгоритмов на графах по сей день. В частности, если требуется рассчитать какие-либо параметры маршрутов, то теория графов с её богатым математическим аппаратом оказывает помощь при решении поставленных задач. Часто бывает полезно и наглядно изображать некоторую ситуацию в виде рисунка, состоящего из точек вершин, представляющих основные элементы ситуации, и линий (ребер), соединяющих определенные пары этих вершин и представляющих связи между ними. Такие рисунки известны под общим названием графов. Благодаря своему широкому применению теория графов в последние годы интенсивно развивается. В большой мере этому способствует также прогресс в области развития больших быстродействующих вычислительных машин. Непосредственное и детальное представление практических систем, таких, как распределительные сети и системы связи, приводит к графам большого размера успешный анализ которых зависит в равной степени как от существования "хороших" алгоритмов, так и от возможности использования быстродействующих вычислительных машин.
Одной из достаточно часто решаемых задач на основе теории графов является нахождение маршрута для транспортного средства. При этом, как правило, маршрут должен соответствовать ряду условий. Например, его длина не должна превосходить определённого значения, или необходимо обеспечить наименьший расход горючего, или необходимо обойти определённого вида препятствия, обусловленные рельефом местности и др. Подобные задачи возникают при осуществлении грузоперевозок, строительстве дорог и т.п.
1 АНАЛИЗ ТРЕБОВАНИЙ И РАЗРАБОТКА ПРОЕКТА
1.1 Постановка задачи
Разработка приложения, которое будет определять длину кратчайшего пути между двумя вершинами графа, а также кратчайший маршрут – является основной задачей курсового проекта. Проанализировав основные существующие алгоритмы на графах, был выбран алгоритм Дейкстры для реализации поставленной задачи, средства разработки и основные действия, которые программа должна выполнять.
1.2 Описание структуры входных и выходных данных
Входными данными для приложения будут являться:
– количество вершин графа;
– матрица смежности графа, в которой значение в ячейке aij соответствует длине ребра из вершины i в вершину j;
– номер стартовой вершины, из которой начинается маршрут;
– номер конечной вершины, до которой рассчитывается путь.
В результате работы программы пользователю должны быть предоставлены следующие данные:
– длина кратчайшего пути от стартовой до конечной вершины;
– маршрут между этими вершинами, т.е. все промежуточные вершины, которые необходимо пройти по рассчитанному пути, в порядке их посещения.
Выходные данные должны соответствовать полученной на вход матрице, не допускается включение в конечный маршрут вершин, между которыми нет ребра, и каждая вершина может входить в результирующий маршрут строго по одному разу.
2 РАЗРАБОТКА ПРОГРАММЫ
2.1 Обоснование выбора среды программирования
Для реализации поставленной задачи мною была выбрана среда разработки Microsoft Visual Studio 2015, так как она наиболее подходит для создания данного проекта, а именно вычислительной программы, имеет понятный интерфейс и большой набор функций, инструментов[1].
Microsoft Visual Studio – линейка продуктов компании Майкрософт, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Microsoft Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Microsoft Silverlight[2].
Visual Studio включает в себя редактор исходного кода с поддержкой технологии IntelliSenseи возможностью простейшего рефакторинга кода. Встроенный отладчик может работать как отладчик уровня исходного кода, так и как отладчик машинного уровня. Остальные встраиваемые инструменты включают в себя редактор форм для упрощения создания графического интерфейса приложения, веб-редактор, дизайнер классов и дизайнер схемы базы данных[3]. Visual Studio позволяет создавать и подключать сторонние дополнения (плагины) для расширения функциональности практически на каждом уровне, включая добавление поддержки систем контроля версий исходного кода (как например, SubversionиVisual SourceSafe), добавление новых наборов инструментов (например, для редактирования и визуального проектирования кода на предметно-ориентированных языках программирования или инструментов для прочих аспектов процесса разработки программного обеспечения[4].
3 РАЗРАБОТКА ПРОГРАММНОЙ ДОКУМЕНТАЦИИ
3.1 Правила пользования программным средством
Для запуска разработанного приложения необходимо запустить файл dekstr.exe. После чего следовать указаниям программы. Необходимо учитывать:
– при выборе способа ввода программа примет значения 1 или 2;
– количество вершин графа должно быть целым положительным числом;
– элементы матрицы смежности должны быть положительными числам;
– стартовая и конечная вершины должны быть целыми положительными числами меньшими, чем количество вершин.
Не соблюдение данных правил приведет к повторному вводу значений. При выборе ввода исходных данных из текстового файла, необходимо, чтобы данный файл находился в одном каталоге с исполняемым файлом программы, иначе программа не произведет расчет.
3.2 Технические требования
Перечислим минимальные программные и аппаратные требования для комфортной работы приложения:
– память (ОЗУ): 512 MB;
– процессор: Intel P4– совместимый процессор с частотой 1 GHz;
– оперативная память (RAM): 256 MB;
– объём жёсткого диска (HDD): 500 MB;
– операционная система:Windows 7,Windows 10, Windows XP; Windows Server 2003;Windows Vista; Windows Server 2008[6].
ЗАКЛЮЧЕНИЕ
В данном курсовом проекте выполнена постановка задачи нахождения кратчайшего пути. Задача о кратчайшем пути - задача поиска самого короткого пути (цепи) между двумя точками (вершинами) на графе, в которой минимизируется сумма весов ребер, составляющих путь.
Выполнен обзор существующих решений задачи нахождения кратчайшего пути.
- Алгоритм Дейкстры находит кратчайший путь от одной из вершин графа до всех остальных. Алгоритм работает только для графов без рёбер отрицательного веса[7].
- Алгоритм Беллмана-Форда находит кратчайшие пути от одной вершины графа до всех остальных во взвешенном графе. Вес ребер может быть отрицательным[8].
- Алгоритм Флойда-Уоршелла находит кратчайшие пути между всеми вершинами взвешенного ориентированного графа[9].
- Алгоритм Ли (волновой алгоритм) основан на методе поиска в ширину. Находит путь между вершинами s и t графа (s не совпадает с t), содержащий минимальное количество промежуточных вершин (ребер).
Рассмотрен вопрос: Динамическое программирование.
Под динамическим программированием понимают некоторый специальный метод оптимизации, суть которого состоит в отыскании оптимального решения путем выполнения вычислений в несколько шагов (этапов)[10].
Вся задача оптимизации разделяется на несколько шагов, причем все шаги могут быть уникальными или одинаковыми и чередоваться друг с другом. Некоторые задачи оптимизации легко разделяются на шаги естественным способом, а для других – вводится искусственное разделение на шаги.
1. М. Эллис, Б. Строуструп. Справочное руководство по языку C++ с комментариями: Пер. с англ. – Москва: Мир, 1992. 445с.
2. Стенли Б. Липпман. C++ для начинающих: Пер. с англ. 2тт. – Москва: Унитех; Рязань: Гэлион, 1992, 304-345сс.
3. Бруно Бабэ. Просто и ясно о Borland C++: Пер. с англ. – Москва: БИНОМ, 1994. 400с.
4. В.В. Подбельский. Язык C++: Учебное пособие. – Москва: Финансы и статистика, 1995. 560с.
5. Ирэ Пол. Объектно-ориентированное программирование с использованием C++: Пер. с англ. - Киев: НИИПФ ДиаСофт Лтд, 1995. 480с.
6. Т. Фейсон. Объектно-ориентированное программирование на Borland C++ 4.5: Пер. с англ. - Киев: Диалектика, 1996. 544с.
7. Т. Сван. Освоение Borland C++ 4.5: Пер. с англ. – Киев: Диалектика, 1996. 544с.
8. Г. Шилдт. Самоучитель C++: Пер. с англ. – Санкт-Петербург: BHV-Санкт-Петербург, 1998. 620с.
9. У. Сэвитч. C++ в примерах: Пер. с англ. – Москва: ЭКОМ, 1997. 736с.
10. К. Джамса. Учимся программировать на языке C++: Пер. с англ. – Москва: Мир, 1997. 320с.