Описание требований к программе
Требования к функциям системы
Система должна представлять приложение для ПК под управление Windows 10 и обеспечить следующий функционал:
- Создание пользователем или автоматическая генерация игрового поля с графом, ребра которого имеют веса;
- Сохранение созданных графов в отдельный файл;
- Автоматический поиск меньшего по весу ребер маршрута на графе;
- Пользовательское меню, которое позволяет выбирать-нужно ли пользователю сохранить граф, создать граф вручную, сгенерировать определенный граф;
- Предоставлять пользователю возможность строить маршруты на графе для последующего их сравнения с кратчайшим маршрутом, который был найден автоматически;
- Предоставлять возможность пользователю назначать числовые диапазоны, в которых будут автоматически генерироваться ребра графа;
- Предоставлять возможность пользователю самостоятельно выбирать количество вершин, из которых будет создан граф;
Язык программирования
Исходным ЯП является С#.
Назначение программы
Программа предназначена для создания или автоматической генерации графов со взвешенными ребрами в 2-х мерной графике, сохранения графов в отдельный файл, построения пользователем маршрута, рекурсивного автоматического поиска оптимального маршрута, и сравнения маршрута, найденного автоматически с маршрутом, построенным пользователем.
Программа решает следующие задачи:
- Создание или автоматическая генерация игрового поля;
- Сохранение созданных полей в отдельный файл;
- Поиск кратчайшего маршрута на графе;
- Сравнение пользовательского маршрута и найденного кратчайшего маршрута на графе;
Приблизительный вид графа на игровом поле:
Серым цветом закрашены заблокированные для обхода вершины.
Макет главного меню программы:
Примерный макет пользовательского интерфейса в главном меню программы.
Назначение элементов управления:
- Кнопка «Создать граф вручную» предназначена для создания на игровом поле графа в ручном режиме (с указанием количества вершин наличия ребер, их весов, а также строения графа и весов вершин).
- Кнопка «Автоматически сгенерировать граф» открывает игровое поле и создает случайный взвешенный граф в автоматическом режиме (с указанием числового диапазона генерации весов ребер, а также количества вершин).
- Кнопка «Открыть граф из файла» открывает проводник windows и затем пользователю нужно выбрать необходимый для открытия граф.
Создание графа:
Красным цветом выделены параметры, которые пользователь задает в ручную
После ввода всех необходимых параметров и нажатия кнопки «создать граф»-генерируется граф по пользователем заданным параметрам.
Выбор кратчайшего пути пользователем происходит поочередным нажатием на круги с номерами вершин-(путь между ними подсвечивается красным цветом)
При поочередном нажатие на вершину 2, а затем на вершину 1, ребро между ними становится красным(также подсвечиваются и сами вершины)-при нажатии кнопки сброс выделения вершин-все действия отменяются-происходит сброс выделения вершин и пути между ними-пользователь может заново выбирать путь
При поочередном нажати на вершины 2, 1, а затем на кнопку проверить путь происходи автоматический поиск кратчайшего маршрута, найденный автоматически маршрут сверяется с выбранным пользователем, затем выдается сообщение-успех!, кратчайший путь найден!,если найденный автоматически маршрут соответствует пользовательскому, или сообщение о том что маршрут был не кратчайшим
При нажатии кнопки-найти кратчайший путь происходит автоматический поиск кратчайшего пути, а затем подсвечиваются вершины и ребра через которые и был построен кратчайший путь
Для упрощения визуальной работы с графом- вершины должны распологаться кругом на одинаковом расстояннии друг от друга – чтобы избежать накладывания вершин друг на друга
Фрагмент программного кода:
private void button_CreateGraph_Click(object sender, EventArgs e) { //считываем введенные данные var vertexCount = Convert.ToInt32(numericUpDown_VertexCount.Value); var weightFrom = Convert.ToInt32(numericUpDown_WeightFrom.Value); var weightTo = Convert.ToInt32(numericUpDown_WeightTo.Value); //объявляем генератор случайных чисел var random = new Random(); //объявляем матрицу нужно размерности var matrix = new int[vertexCount, vertexCount]; //идем по каждой строке матрицы for (int i = 0; i < vertexCount; i++) { //идем по каждой ячейке i-ой строки матрицы for (int j = 0; j < vertexCount; j++) { //если ячейка на главной диагонали, if (i == j) { //то идем смтореть следующую continue; } //Если ячейка слева от диагонали, if (i > j) { //то пишем в нее случайное число из заданного пользователе диапазона matrix[i, j] = random.Next(weightFrom, weightTo); //и дублируем это значения в симметричную ячейку matrix[j, i] = matrix[i, j]; } } } //запоминаем введенную матрицу GameParameters = new GameField(); GameParameters.Matrix = matrix; //говорим, что работа на этой форме окончена и закрываем ее (управление передается обратно на главную форму) this.DialogResult = DialogResult.OK; } }
Содержание архива:
- Исходник программы на языке программирования C# (Win Forms) для Visual Studio
klausms