Главная страница
Навигация по странице:

  • Что такое граф

  • Курсовая. Курсовой проект по междисциплинарному курсу Математические методы


    Скачать 443.76 Kb.
    НазваниеКурсовой проект по междисциплинарному курсу Математические методы
    АнкорКурсовая
    Дата28.06.2022
    Размер443.76 Kb.
    Формат файлаdocx
    Имя файла081_Kleshnin_EO_KP1.docx
    ТипКурсовой проект
    #619275









    МАТЕМАТИЧЕСКИЕ

    МЕТОДЫ
    КП.081.


    Министерство цифрового развития, связи и массовых коммуникаций РФ

    Уральский технический институт связи и информатики (филиал)

    ФГБОУ ВО «Сибирский государственный университет

    телекоммуникаций и информатики» в г. Екатеринбурге

    (УрТИСИ СибГУТИ)




    КУРСОВОЙ ПРОЕКТ

    по междисциплинарному курсу: «Математические методы»

    на тему: «Решение задачи о коммивояжере»
    Вариант № 10

    Выполнил:

    Студент группы 081

    Клешнин Е.О.

    Руководитель:

    Тюпина О.М.

    Екатеринбург 2021
    Отзыв руководителя

    Министерство цифрового развития, связи и массовых коммуникаций РФ

    Уральский технический институт связи и информатики (филиал)

    ФГБОУ ВО «Сибирский государственный университет

    телекоммуникаций и информатики» в г. Екатеринбурге

    (УрТИСИ СибГУТИ)

    Цикловая комиссия ИТ и АСУ кафедры ИСТ
    ЗАДАНИЕ ДЛЯ КУРСОВОГО ПРОЕКТИРОВАНИЯ
    По междисциплинарному курсу Математическиеметоды

    Студента 2курса081 группы

    Клешнин Егор Олегович

    ТЕМА ЗАДАНИЯРешение задачи о коммивояжере
    ИСХОДНЫЕ ДАННЫЕ

    ВАРИАНТ 10

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

    1. Пояснительная записка

    Введение; Теория графов; Элементы теории графов; Виды графов; Методы решения задач о коммивояжере; Матрица смежности;Программная реализация; Заключение; Библиография;
    2. Графическая часть




    Дата выдачи Срок окончания
    Председатель ЦК ИТ и АСУ кафедры ИСТ Тюпина О.М.

    Преподаватель – руководитель Тюпина О.М.

    Студент Клешнин Е.О.


    Содержание


    Введение 6

    1.Теория графов 7

    1.1Элементы теории графов 7

    1.1.2 Виды графов 7

    1.2Методы решения задач о коммивояжере 10

    1.3 Матрица смежности 11

    2 Разработка программы 12

    2.1 Разработка блок-схем программы 12

    2.2 Выбор инструментальных средств разработки 15

    2.3 Инструкция по работе с программой 17

    Заключение 19

    Библиография 21

    Приложение А 22

    Введение




    Задача о коммивояжере – относится к классу NP–полных задач дискретной оптимизации. Время работы алгоритма, решающего задачу коммивояжера, существенно зависит от размера входных данных, то есть от количества городов. Для нее до сих пор не найдено быстрых полиномиальных алгоритмов. Для графов задача формулируется следующим образом: требуется найти гамильтонов цикл наименьшей стоимости во взвешенном полном графе. То есть каждую вершину графа нужно посетить ровно один раз.

    Задача коммивояжера – важная задача транспортной логистики, отрасли, занимающейся планированием транспортных перевозок. Коммивояжеру, чтобы распродать нужные товары, следует объехать n пунктов и в конце вернуться в исходный пункт.

    Требуется определить наиболее выгодный маршрут объезда. В качестве меры выгодности маршрута может служить суммарное время пути, суммарная стоимость дороги или длина маршрута. Условия задачи должны содержать критерий выгодности маршрута (т.е. должен ли он быть максимально коротким, быстрым, дешевым или все вместе), а также исходные данные в виде матрицы затрат (расстояния, стоимости, времени и т. д.) при перемещении между рассматриваемыми пунктами. Особенности задачи в том, что она довольно просто формулируется и найти хорошие решения для нее также относительно просто, но вместе с тем поиск действительно оптимального маршрута для большого набора данных – непростой и ресурсоемкий процесс. Для решения задачи коммивояжера ее надо представить как математическую модель. При этом исходные условия можно записать в формате матрицы – таблицы, где строкам соответствуют города отправления, столбцам – города прибытия, а в ячейках указываются расстояния между ними; или в виде графа – схемы, состоящей из вершин (точек, кружков), которые символизируют города, и соединяющих их ребер (линий), длина которых соответствует расстоянию между городами.

    Целью курсового проекта является разработка программы, решающий задачу о коммивояжере.

    Для достижения поставленной цели нужно решить следующие задачи:

    1. изучить задачу коммивояжера;

    2. разработать блок-схему программы;

    3. выбрать инструментальные средства разработки;

    4. написать программу;

    5. оформить пояснительную записку.





    1. Теория графов




      1. Элементы теории графов




        1. Что такое граф?

    Граф – это совокупность объектов со связями между ними. Объекты представляются как вершины, или узлы графа, а связи – как дуги, или рёбра. Для разных областей применения виды графов могут различаться направленностью, ограничениями на количество связей и дополнительными данными о вершинах или рёбрах. Граф или неориентированный граф G – это упорядоченная пара G:= (V, E), для которой выполнены следующие условия:

    1. V это непустое множество вершин или узлов;

    2. E это множество пар (в случае неориентированного графа – неупорядоченных) вершин, называемых рёбрами.

    1.1.2 Виды графов


    1. Ориентированные и неориентированные графы.



    Рисунок 1.1 – Неориентированный граф



    1. Смешанные графы.



    Рисунок 1.2 – Смешанный граф



    1. Пустые графы.



    Рисунок 1.3 – Пустой граф



    1. Мультиграфы.



    Рисунок 1.4 – Мультиграф



    1. Обыкновенные графы.



    Рисунок 1.5 – Обыкновенный граф



    1. Полные графы.



    Рисунок 1.6 – Полный граф

    1. Двудольный граф.



    Рисунок 1.7 – Двудольный граф



    1. Эйлеров граф.



    Рисунок 1.8 – Эйлеров граф



    1. Регулярный граф.



    Рисунок 1.9 – Регулярный граф



    1. Гамильтонов граф.



    Рисунок 1.10 – Гамильтонов граф



    1. Взвешенный граф.



    Рисунок 1.11 – Взвешенный граф



    1. Графы-деревья.



    Рисунок 1.12 – Графы-деревья



      1. Методы решения задач о коммивояжере



    Методы решения задач, которыми теория располагает сегодня это, прежде всего, неклассические методы математического программирования, линейное, нелинейное и динамическое программирование, целочисленное и булево, геометрическое и выпуклое программирование, принципы оптимальности, минимаксные и максиминные методы и многие другие.

    Математическая модель задачи коммивояжера.

    Сформулированная задача – задача целочисленная. Рассматривается n городов, связанных дорожной сетью. Пусть хij = 1, если путешественник переезжает из i-ого города в j-ый и хij =0, если j-ый город не посещается. Условно введем (n+1)-й город, совмещенный с 1-м городом, т.е. расстояния от (n+1)-го города до любого другого, отличного от первого, равны расстояниям от первого города. При этом, если из первого города можно лишь выйти, то в (n+1)-й город можно лишь прийти. Введем дополнительные целые переменные, равные номеру посещения этого города на пути. u1=0, un+1=n. Для того, чтобы избежать замкнутых путей, выйти из первого города и вернуться в (n+1) введем дополнительные ограничения, связывающие переменные xij и переменные ui (ui целые неотрицательные числа).
    Min , при ограничениях:

    , 1 ;

    , 1 ;

    , S
    Верхняя двойная сумма – целевая функция задачи, для которой наименьшее значение следует отыскивать. Соотношения ниже-ограничения, накладываемые на переменные. Однократные суммы – указывают на требование для занятия единичными элементами плана-решения Х единственной позиции в каждой строке (1≤ i ≤ n) и в каждом столбце (1 ≤ j ≤ n).


    1.3 Матрица смежности




    Матрица смежности это квадратная матрица, в которой каждый элемент принимает одно из двух значений: 0 или 1. Прежде чем отобразить граф через матрицу смежности, рассмотрим простой пример такой матрицы (Рисунок 1.13).

    Рисунок 1.13 – Матрица смежности

    Это двоичная квадратная матрица, т.к. число строк в ней равно числу столбцов, и любой из ее элементов имеет значение либо 1, либо 0. Первая строка и первый столбец (не входят в состав матрицы, а показаны здесь для легкости ее восприятия) содержат номера, на пересечении которых находится каждый из элементов, и они определяют индексное значение последних. Имея в наличии лишь матрицу такого типа, несложно построить соответствующий ей граф.

    Рисунок 1.14 – Граф

    Для графического отображения графа необходимо уметь вычислять по матрице смежности количество его вершин, а также обладать знанием следующего правила. Когда из одной вершины в другую проход свободен (имеется ребро), тогда в ячейку заноситься 1, иначе – 0. Немного формализовав только что сказанное, получим: если из i в j существует ребро, то A[i][j]:=1, в противном случае A[i][j]:=0. Как видно, все элементы на главной диагонали равны нулю, это следствие отсутствия у графа петель. Но ни что не мешает, чтобы некоторые или все элементы главной диагонали были единицами.

    В программе матрица смежности задается при помощи обычного двумерного массива, имеющего размерность n*n, где n – число вершин графа.

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

    Чтобы представить граф в виде матрицы смежности понадобиться O(|V|2) памяти, поскольку ее размер, как уже отмечалось, равен квадрату числа всех вершин. И если количество ребер графа, в сопоставлении с количеством вершин, невелико, то значения многих элементов матрицы смежности будут нулевыми, следовательно, использование данного метода нецелесообразно, т.к. для подобных графов имеются наиболее оптимальные способы их представления.

    2 Разработка программы


    2.1 Разработка блок-схем программы





    Рисунок 2.1 – Первая функция


    Рисунок 2.2 – Вторая функция

    Рисунок 2.3 – Третья функция



    Рисунок 2.4 – Четвертая функция



    Рисунок 2.5 – Пятая функция


    2.2 Выбор инструментальных средств разработки




    Для того, чтобы выбрать язык, на котором будет осуществляться программа, следует сравнить некоторые языки программирования, выделить достоинства и недостатки. К сравнению подвергнутся 2 языка: Pascal и C++.

    Многие новички в программировании сталкиваются с Pascal. Этот язык был создан в далёком 1970 году. Данный язык создавался, как учебный. Ниже рассмотрим достоинства и недостатки языка программирования Pascal.

    Достоинства:

    1. после изучения языка программирования Pascal легко перейти на другие языки программирования;

    2. легок в изучении.
















    Недостатки:

          1. устарел;

          2. отсутствие возможности создания интерфейса для программ;

          3. очень низкая мощность языка;

          4. подавляющая масса сообщества программистов – обучающиеся.


    Язык программирования С++ был создан позже Pascal в 1983 году. Данный язык программирования обновляется до сих пор и является одним из самых популярных языков. Им пользуется огромное количество программистов, чтобы решать огромный перечень задач. Ниже рассмотрим достоинства и недостатки языка программирования С++.

    Достоинства:

    1. возможность создания интерфейса программы, а также гибкая настройка этого интерфейса;

    2. предсказуемое выполнение программ является важным достоинством для построения систем реального времени. Весь код, неявно генерируемый
      компилятором для реализации языковых возможностей определён в стандарте. Также строго определены места программы, в которых этот код выполняется. Это даёт возможность замерять или рассчитывать время реакции программы на внешнее событие;

    3. автоматический вызов деструкторов объектов при их уничтожении, причём в порядке, обратном вызову конструкторов. Это упрощает (достаточно объявить переменную) и делает более надёжным освобождение ресурсов (память, файлы и т.п.), а также позволяет гарантированно выполнять переходы состояний программы, не обязательно связанные с освобождением ресурсов (например, запись в журнал);

    4. присутствует много синтаксического сахара. Синтаксический сахар - это такие конструкции, которые созданы для облегчения написания и понимания кода (особенно если это код другого программиста) и не играют роли при компиляции;

    5. язык поддерживает понятия физической (const) и логической (mutable) константности. Это делает программу надёжнее, так как позволяет компилятору, например, диагностировать ошибочные попытки изменения значения переменной. Объявление константности даёт программисту, читающему текст программы дополнительное представление о правильном использовании классов и функций, а также может являться подсказкой для оптимизации. Перегрузка функций-членов по признаку константности позволяет определять изнутри объекта цели вызова метода (константный для чтения, неконстантный для изменения). Объявление mutable позволяет сохранять логическую константность при использовании кэшей и ленивых вычислений;

    6. используя шаблоны, возможно создавать обобщённые контейнеры и алгоритмы для разных типов данных, а также специализировать и вычислять на
      этапе компиляции;

    7. возможность имитации расширения языка для поддержки парадигм, которые не поддерживаются компиляторами напрямую;

    8. используя шаблоны и множественное наследование можно имитировать классы-примеси и комбинаторную параметризацию библиотек;

    9. эффективность. Язык спроектирован так, чтобы дать программисту максимальный контроль над всеми аспектами структуры и порядка исполнения программы. Ни одна из языковых возможностей, приводящая к дополнительным накладным расходам, не является обязательной для использования – при необходимости язык позволяет обеспечить максимальную эффективность программы;

    10. очень удобная среда разработки приложений Microsoft Visual Studio;

    11. имеется возможность работы на низком уровне с памятью, адресами.

    Недостатки:

    1. синтаксис, провоцирующий ошибки;

    2. присутствует проблема с бинарной совместимостью библиотек. Если ваши библиотеки не в исходниках, то вам важно чтобы они были совместимы;

    3. операции присваивания (=), инкрементации (++), декрементации (--) и другие возвращают значение. В сочетании с обилием операций это позволяет, хотя и не обязывает, создавать трудночитаемые выражения;

    4. некоторые преобразования типов неинтуитивны. В частности, операция над беззнаковым и знаковым числами выдаёт беззнаковый результат.

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

    2.3 Инструкция по работе с программой




    Чтобы начать работу с программой нужно запустить её ярлык (Рисунок 2.6).

    Рисунок 2.6 - Ярлык

    В ходе создания программы был разработан интерфейс (Рисунок 2.7).

    Рисунок 2.7 – Интерфейс

    После запуска программы нужно выбрать количество городов (Рисунок 2.8).

    Рисунок 2.8 – Выбор количества городов.
    Следующим этапом будет ввод расстояния от города до города (Рисунок 2.9).

    Рисунок 2.9 – Ввод расстояния

    После построится матрица смежности (Рисунок 2.10).

    Рисунок 2.11 – Матрица

    Далее нужно ввести стартовый город (Рисунок 2.12).

    Рисунок 2.13 – Ввод города.

    После этого выводится пройденное расстояние (Рисунок 2.14).

    Рисунок 2.15 – Вывод расстояния

    Результат работы программы (Рисунок 2.16).

    Рисунок 2.16 – Результат работы программы

    Заключение




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

    Были выполнены следующие задачи:

    1) были изучены графы;

    2) разработана блок-схема решения задача коммивояжера с помощью графов;

    3) произведен выбор инструментальных средств разработки;

    4) матрица смежности реализована на языке программирования.

    Составленная программа может решать задачи с помощью матриц смежности.


    Библиография



    1 Учебное пособие: Теория графов, Д. В. Карпов [Электронный ресурс] – Режим доступа: https://logic.pdmi.ras.ru/dvk/graphs_dk.pdf;

    2 Учебное пособие: Основы высшей математики [Электронный ресурс] – Режим доступа: https://educon.by/index.php/materials/hmath/osnovy-matricy;

    3 Лекция: Линейная алгебра [Электронный ресурс] – Режим доступа: http://bseu.by/hm/uchm/pod/podvm1.pdf;

    4 Учебно-пособие: Матрица смежности [Электронный ресурс] – Режим доступа: https://kvodo.ru/adjacency-matrix.html.





    Приложение А


    (справочное)

    Листинг программы
    Ниже представлен листинг программы:

    #pragma once
    namespace WiFormC {
    using namespace System;

    using namespace System::ComponentModel;

    using namespace System::Collections;

    using namespace System::Windows::Forms;

    using namespace System::Data;

    using namespace System::Drawing;
    ///

    /// Сводка для MyForm

    ///


    public ref class MyForm : public System::Windows::Forms::Form

    {

    public:

    MyForm(void)

    {

    InitializeComponent();

    //

    //TODO: добавьте код конструктора

    //

    }
    protected:

    ///

    /// Освободить все используемые ресурсы.

    ///


    MyForm()

    {

    if (components)

    {

    delete components;

    }

    }

    private: System::Windows::Forms::TextBox^ textBox1;

    protected:

    private: System::Windows::Forms::Label^ label1;

    private: System::Windows::Forms::Button^ button1;

    private: System::Windows::Forms::TextBox^ textBox2;

    private: System::Windows::Forms::Button^ button2;

    private: System::Windows::Forms::Label^ label2;

    private: System::Windows::Forms::Label^ label3;

    private: System::Windows::Forms::DataGridView^ dataGridView1;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column1;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column2;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column3;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column4;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column5;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column6;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column7;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column8;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column9;

    private: System::Windows::Forms::Button^ button3;

    private: System::Windows::Forms::TextBox^ textBox3;

    private: System::Windows::Forms::Label^ label4;

    private: System::Windows::Forms::Button^ button4;
    private: System::Windows::Forms::Label^ label5;
    private: System::Windows::Forms::Label^ label6;

    private: System::Windows::Forms::TextBox^ textBox5;

    private: System::Windows::Forms::Label^ label7;

    private: System::Windows::Forms::TextBox^ textBox6;

    private: System::Windows::Forms::DataGridViewTextBoxColumn^ Column10;


    private:

    ///

    /// Обязательная переменная конструктора.

    ///


    System::ComponentModel::Container ^components;
    #pragma region Windows Form Designer generated code

    ///

    /// Требуемый метод для поддержки конструктора — не изменяйте

    /// содержимое этого метода с помощью редактора кода.

    ///


    void InitializeComponent(void)

    {

    this->textBox1 = (gcnew System::Windows::Forms::TextBox());

    this->label1 = (gcnew System::Windows::Forms::Label());

    this->button1 = (gcnew System::Windows::Forms::Button());

    this->textBox2 = (gcnew System::Windows::Forms::TextBox());

    this->button2 = (gcnew System::Windows::Forms::Button());

    this->label2 = (gcnew System::Windows::Forms::Label());

    this->label3 = (gcnew System::Windows::Forms::Label());

    this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView());

    this->Column1 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column2 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column3 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column4 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column5 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column6 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column7 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column8 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column9 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->Column10 = (gcnew System::Windows::Forms::DataGridViewTextBoxColumn());

    this->button3 = (gcnew System::Windows::Forms::Button());

    this->textBox3 = (gcnew System::Windows::Forms::TextBox());

    this->label4 = (gcnew System::Windows::Forms::Label());

    this->button4 = (gcnew System::Windows::Forms::Button());

    this->label5 = (gcnew System::Windows::Forms::Label());

    this->label6 = (gcnew System::Windows::Forms::Label());

    this->textBox5 = (gcnew System::Windows::Forms::TextBox());

    this->label7 = (gcnew System::Windows::Forms::Label());

    this->textBox6 = (gcnew System::Windows::Forms::TextBox());

    (cli::safe_cast(this->dataGridView1))->BeginInit();

    this->SuspendLayout();

    //

    // textBox1

    //

    this->textBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->textBox1->Location = System::Drawing::Point(66, 58);

    this->textBox1->Name = L"textBox1";

    this->textBox1->Size = System::Drawing::Size(145, 29);

    this->textBox1->TabIndex = 0;

    this->textBox1->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &MyForm::textBox1_KeyPress);

    //

    // label1

    //

    this->label1->AutoSize = true;

    this->label1->Cursor = System::Windows::Forms::Cursors::Default;

    this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->label1->Location = System::Drawing::Point(62, 22);

    this->label1->Name = L"label1";

    this->label1->Size = System::Drawing::Size(278, 20);

    this->label1->TabIndex = 1;

    this->label1->Text = L"Введите количество городов(2-10)";

    //

    // button1

    //

    this->button1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->button1->Location = System::Drawing::Point(229, 58);

    this->button1->Name = L"button1";

    this->button1->Size = System::Drawing::Size(111, 29);

    this->button1->TabIndex = 2;

    this->button1->Text = L"Далее";

    this->button1->UseVisualStyleBackColor = true;

    this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);

    //

    // textBox2

    //

    this->textBox2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->textBox2->Location = System::Drawing::Point(66, 132);

    this->textBox2->Name = L"textBox2";

    this->textBox2->Size = System::Drawing::Size(145, 29);

    this->textBox2->TabIndex = 3;

    this->textBox2->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &MyForm::textBox2_KeyPress);

    //

    // button2

    //

    this->button2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->button2->Location = System::Drawing::Point(229, 132);

    this->button2->Name = L"button2";

    this->button2->Size = System::Drawing::Size(111, 29);

    this->button2->TabIndex = 4;

    this->button2->Text = L"Далее";

    this->button2->UseVisualStyleBackColor = true;

    this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);

    //

    // label2

    //

    this->label2->AutoSize = true;

    this->label2->Cursor = System::Windows::Forms::Cursors::Default;

    this->label2->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->label2->Location = System::Drawing::Point(62, 99);

    this->label2->Name = L"label2";

    this->label2->Size = System::Drawing::Size(278, 20);

    this->label2->TabIndex = 5;

    this->label2->Text = L"Введите количество городов(2-10)";

    //

    // label3

    //

    this->label3->AutoSize = true;

    this->label3->Cursor = System::Windows::Forms::Cursors::Default;

    this->label3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->label3->Location = System::Drawing::Point(62, 174);

    this->label3->Name = L"label3";

    this->label3->Size = System::Drawing::Size(163, 20);

    this->label3->TabIndex = 6;

    this->label3->Text = L"Матрица смежности";

    //

    // dataGridView1

    //

    this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;

    this->dataGridView1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^ >(10) {

    this->Column1,

    this->Column2, this->Column3, this->Column4, this->Column5, this->Column6, this->Column7, this->Column8, this->Column9, this->Column10

    });

    this->dataGridView1->Location = System::Drawing::Point(12, 211);

    this->dataGridView1->Name = L"dataGridView1";

    this->dataGridView1->Size = System::Drawing::Size(1048, 150);

    this->dataGridView1->TabIndex = 7;

    //

    // Column1

    //

    this->Column1->HeaderText = L"Column1";

    this->Column1->Name = L"Column1";

    //

    // Column2

    //

    this->Column2->HeaderText = L"Column2";

    this->Column2->Name = L"Column2";

    //

    // Column3

    //

    this->Column3->HeaderText = L"Column3";

    this->Column3->Name = L"Column3";

    //

    // Column4

    //

    this->Column4->HeaderText = L"Column4";

    this->Column4->Name = L"Column4";

    //

    // Column5

    //

    this->Column5->HeaderText = L"Column5";

    this->Column5->Name = L"Column5";

    //

    // Column6

    //

    this->Column6->HeaderText = L"Column6";

    this->Column6->Name = L"Column6";

    //

    // Column7

    //

    this->Column7->HeaderText = L"Column7";

    this->Column7->Name = L"Column7";

    //

    // Column8

    //

    this->Column8->HeaderText = L"Column8";

    this->Column8->Name = L"Column8";

    //

    // Column9

    //

    this->Column9->HeaderText = L"Column9";

    this->Column9->Name = L"Column9";

    //

    // Column10

    //

    this->Column10->HeaderText = L"Column10";

    this->Column10->Name = L"Column10";

    //

    // button3

    //

    this->button3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->button3->Location = System::Drawing::Point(229, 409);

    this->button3->Name = L"button3";

    this->button3->Size = System::Drawing::Size(111, 29);

    this->button3->TabIndex = 8;

    this->button3->Text = L"Далее";

    this->button3->UseVisualStyleBackColor = true;

    this->button3->Click += gcnew System::EventHandler(this, &MyForm::button3_Click);

    //

    // textBox3

    //

    this->textBox3->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->textBox3->Location = System::Drawing::Point(66, 409);

    this->textBox3->Name = L"textBox3";

    this->textBox3->Size = System::Drawing::Size(145, 29);

    this->textBox3->TabIndex = 9;

    this->textBox3->KeyPress += gcnew System::Windows::Forms::KeyPressEventHandler(this, &MyForm::textBox3_KeyPress);

    //

    // label4

    //

    this->label4->AutoSize = true;

    this->label4->Cursor = System::Windows::Forms::Cursors::Default;

    this->label4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->label4->Location = System::Drawing::Point(62, 375);

    this->label4->Name = L"label4";

    this->label4->Size = System::Drawing::Size(211, 20);

    this->label4->TabIndex = 10;

    this->label4->Text = L"Введите стартовый город";

    //

    // button4

    //

    this->button4->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->button4->Location = System::Drawing::Point(177, 660);

    this->button4->Name = L"button4";

    this->button4->Size = System::Drawing::Size(111, 29);

    this->button4->TabIndex = 11;

    this->button4->Text = L"Заново";

    this->button4->UseVisualStyleBackColor = true;

    this->button4->Click += gcnew System::EventHandler(this, &MyForm::button4_Click);

    //

    // label5

    //

    this->label5->AutoSize = true;

    this->label5->Cursor = System::Windows::Forms::Cursors::Default;

    this->label5->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->label5->Location = System::Drawing::Point(97, 616);

    this->label5->Name = L"label5";

    this->label5->Size = System::Drawing::Size(279, 20);

    this->label5->TabIndex = 13;

    this->label5->Text = L"Желаете продолжить поиск путей\?";

    //

    // label6

    //

    this->label6->AutoSize = true;

    this->label6->Cursor = System::Windows::Forms::Cursors::Default;

    this->label6->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->label6->Location = System::Drawing::Point(490, 375);

    this->label6->Name = L"label6";

    this->label6->Size = System::Drawing::Size(78, 20);

    this->label6->TabIndex = 15;

    this->label6->Text = L"Маршрут";

    //

    // textBox5

    //

    this->textBox5->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->textBox5->Location = System::Drawing::Point(587, 385);

    this->textBox5->Multiline = true;

    this->textBox5->Name = L"textBox5";

    this->textBox5->Size = System::Drawing::Size(368, 359);

    this->textBox5->TabIndex = 16;

    //

    // label7

    //

    this->label7->AutoSize = true;

    this->label7->Cursor = System::Windows::Forms::Cursors::Default;

    this->label7->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->label7->Location = System::Drawing::Point(65, 499);

    this->label7->Name = L"label7";

    this->label7->Size = System::Drawing::Size(254, 20);

    this->label7->TabIndex = 17;

    this->label7->Text = L"Общая длина пройденного пути";

    //

    // textBox6

    //

    this->textBox6->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 14.25F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point,

    static_cast(204)));

    this->textBox6->Location = System::Drawing::Point(66, 545);

    this->textBox6->Name = L"textBox6";

    this->textBox6->Size = System::Drawing::Size(368, 29);

    this->textBox6->TabIndex = 18;

    //

    // MyForm

    //

    this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

    this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

    this->ClientSize = System::Drawing::Size(1069, 772);

    this->Controls->Add(this->textBox6);

    this->Controls->Add(this->label7);

    this->Controls->Add(this->textBox5);

    this->Controls->Add(this->label6);

    this->Controls->Add(this->label5);

    this->Controls->Add(this->button4);

    this->Controls->Add(this->label4);

    this->Controls->Add(this->textBox3);

    this->Controls->Add(this->button3);

    this->Controls->Add(this->dataGridView1);

    this->Controls->Add(this->label3);

    this->Controls->Add(this->label2);

    this->Controls->Add(this->button2);

    this->Controls->Add(this->textBox2);

    this->Controls->Add(this->button1);

    this->Controls->Add(this->label1);

    this->Controls->Add(this->textBox1);

    this->Name = L"MyForm";

    this->Text = L"MyForm";

    this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);

    (cli::safe_cast(this->dataGridView1))->EndInit();

    this->ResumeLayout(false);

    this->PerformLayout();
    }

    #pragma endregion
    private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {

    textBox2->Enabled = false; // Отключён

    button2->Enabled = false; // Отключён
    textBox3->Enabled = false; // Отключён

    button3->Enabled = false; // Отключён
    button4->Enabled = false; // Отключён
    textBox5->Enabled = false; // Отключён
    textBox6->Enabled = false; // Отключён

    }
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e);
    private: System::Void textBox1_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

    if (((TextBox^)sender)->Text->IndexOf('a') == -1 && e->KeyChar == 'a')

    {

    e->Handled = false;

    return;

    }

    if (!Char::IsDigit(e->KeyChar) && e->KeyChar != 8)

    e->Handled = true;

    }

    private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e);
    private: System::Void textBox2_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

    if (((TextBox^)sender)->Text->IndexOf('a') == -1 && e->KeyChar == 'a')

    {

    e->Handled = false;

    return;

    }

    if (!Char::IsDigit(e->KeyChar) && e->KeyChar != 8)

    e->Handled = true;

    }

    private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e);

    private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e);

    private: System::Void textBox3_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

    if (((TextBox^)sender)->Text->IndexOf('a') == -1 && e->KeyChar == 'a')

    {

    e->Handled = false;

    return;

    }

    if (!Char::IsDigit(e->KeyChar) && e->KeyChar != 8)

    e->Handled = true;

    }

    };

    }




    Реценз.

    09.02.03.000020 П.172 ПЗ

    Разраб.

    5




    написать администратору сайта