Поиск в графах
Применение поиска в глубину как инструмента для исследования топологических свойств графов. Реализация базовых алгоритмов обработки данных при помощи стандартных библиотек языка С++. Создания графического интерфейса при помощи приложения Windows Form.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 21.02.2019 |
Размер файла | 445,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования Российской Федерации
Пензенский государственный университет
Кафедра "Вычислительная техника"
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
По курсовому проектированию
по курсу "Логика и основы алгоритмизации в инженерных задачах"
на тему "Поиск в графах"
Выполнил: студент Малинин Э.В.
Принял: д.т.н., профессор Пащенко Д.В.
Содержание
- Введение
- 1. Постановка задачи
- 2. Теоретическая часть
- 3. Описание программы
- 4. Отладка и тестирование
- Заключение
- Список используемых источников
- Приложение А. Листинги программы
- Приложение В. Результаты работы программы
Введение
Поиск в глубину - хороший инструмент для исследования топологических свойств графов. Например:
· В качестве подпрограммы в алгоритмах поиска одно- и двусвязных компонент.
· В топологической сортировке.
· Для поиска точек сочленения, мостов.
· В различных расчётах на графах. Например, как часть алгоритма Диница поиска максимального потока.
Поиск в глубину - естественный выбор, когда агент (человек или робот) лично ходит по лабиринту.
1. Постановка задачи
Написать программу для поиска всех путей в глубину.
Программа должна предоставлять пользователю возможность задавать количество вершин, их связанность, построить граф, и выдавать результат поиска в глубину на экран.
Для удобства использования программы должен быть разработан графический интерфейс с возможностью ввода и вывода информации.
Устройствами ввода информации являются клавиатура и мышь.
Программа должна быть разработана для работы в операционной системе Microsoft Windows.
2. Теоретическая часть
Начинаем поиск с некоторой фиксированной вершины v0, присвоим ей ПГ-номер: ПГ(v0)=1. Затем выбираем произвольную вершину w, смежную с v0, присваиваем ей ПГ-номер: ПГ(w)=2, и повторяем процесс уже от вершины w. Предположим, что в результате выполнения нескольких шагов этого процесса мы пришли в вершину v и пусть ПГ(v)=k. Далее действуем в зависимости от ситуации следующим образом:
1. Если имеется новая, т.е. еще непросмотренная вершина u, смежная с v, то, присваивая ей ПГ-номер: ПГ(u)=k+1, продолжаем поиск, начиная с вершины u;
2. Если же не существует ни одной новой, т.е. непросмотренной вершины u, смежной с v, то считаем, что вершина v просмотрена и возвращаемся в вершину, из которой мы попали в v, и продолжаем процесс поиска дальше.
3. Поиск в глубину завершается, когда все вершины графа просмотрены. Если в результате работы алгоритма произошел возврат в начальную вершину v0, но при этом не все вершины графа просмотрены, то необходимо выбрать произвольную вершину из непросмотренных и продолжить процесс поиска от этой вершины.
3. Описание программы
граф алгоритм топологический интерфейс
Для написания данной программы использовался язык программирования C++. C++ - чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов самого различного назначения.
Структура языка C++ позволяет наилучшим образом использовать возможности современных ЭВМ. На языке C++ программы обычно отличаются компактностью и быстротой исполнения. Программа, написанная на C++ для одной вычислительной системы, может быть перенесена с небольшими изменениями (или вообще без них) на другую.
Предсказуемое выполнение программ является важным достоинством для построения систем реального времени. Весь код, неявно генерируемый компилятором для реализации языковых возможностей.
Операции присваивания (=), инкрементации (++), декрементации (--) и другие возвращают значение. В сочетании с обилием операций это позволяет, хотя и не обязывает, создавать трудночитаемые выражения. Наличие этих операций в Си было вызвано желанием получить инструмент ручной оптимизации кода, но в настоящее время оптимизирующие компиляторы обычно генерируют оптимальный код и на традиционных выражениях.
C++ позволяет пропускать break в ветви оператора switch с целью последовательного выполнения нескольких ветвей. Такой же подход принят в языке Java. Есть мнение, что это затрудняет понимание кода.
В качестве среды программирования был выбран программный продукт от компании Microsoft Visual Studio 2013.
Для создания графического интерфейса использовались приложения Windows Form.
Интерфейс очень прост и состоит из не большего числа элементов, это кнопка генерации матрицы, кнопка запуска поиска, кнопка выхода из программы кнопка прорисовки графа, pictureBox для прорисовки, textbox: для задания количества вершин, для ввода стартовой вершины, для вывода информации; MessageBox для вывода ошибок, dataGridView для ввода матрицы. (Рис.3.1)
Рисунок 3.1 - Окно программы
Для запуска программы нужно ввести количество вершин в графе и нажать кнопку "Создание матрицы". Вводим смежность вершин. Выбираем стартовую вершину, от которой начинаем поиск, и нажимаем кнопку "Поиск". Получив необходимые данные, алгоритм начинает работу. Нажимаем кнопку "Рисуем" и граф изображается. В качестве результата выводится список вершин посещенных о стартовой.
Блок-схема программ (Рис. 3.2) показывает, как работает программа. После запуском основной функции поиска, инициализируется массив которые будут хранить информацию о заданном графе. Массив "Nachalo1" хранит массив матрицы смежности.
Рисунок 3.2 - Схема работы программы
4. Отладка и тестирование
В качестве среды разработки была выбрана программа Visual Studio 2013 которая содержит в себе все необходимые средства для разработки и отладки программы. Для отладки программы использовались наборы инструментов: точка остановки, пошаговое выполнение кода программы, анализ содержимого глобальных и локальных переменных.
Тестирование проводилось в процессе разработки и после написания программы.
В результате отладки программы выяснились, случаи в которых программа не выдавала ответ, либо отключается. Это связано с тем что при вводе были указаны символы, не принадлежащие к целочисленному типу данных, а также отрицательные числа. В таких случаях выводится сообщение (Рис. 4.1.).
Рисунок 4.1 - Сообщение об ошибке
При вводе целого положительно числа, происходит вывод программной вершин. (Рис 4.2-4.3) Если ввести иные символы, выведется сообщение об ошибке приведенное выше.
Рисунок 4.2 - Результаты работы программы
Рисунок 4.3 - Результаты работы программы
Заключение
При выполнении данной курсовой работы были получены базовые навыки программирования на языках С++, усовершенствованы навыки разработки многомодульных программ. Изучены основные возможности среды программирования Visual Studio 2013, получены навыки отладки и тестирования программ. Были рассмотрены некоторые функции из стандартной библиотеки языка С++. Были изучены базовые алгоритмы обработки данных.
В результате выполнения курсовой работы была разработана программа, предназначающаяся для поиска в глубину в графах.
Список используемых источников
1. Шилдт Г. Искусство программирования на C++. БХВ.2005
2. P. Лафоре - "Объектно-ориентированное программирование в С++"
3. Ф. Новиков - "Дискретная математика"
4. Р. Стивенс - "Алгоритмы. Теория и практическое применение"
Приложение А. Листинги программы
Файл MyFrom.cpp
#include "MyForm.h"
using namespace System;
using namespace System::Windows::Forms;
[STAThreadAttribute]
void Main(array<String^>^ args) {
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Проект 2::MyForm form;
Application::Run(%form);
}
Файл MyFrom.h
#pragma once
#include <cstdio>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include <vector>
#include "conio.h"
#include "iostream"
#include "stdlib.h"
#include <stdio.h>
#include <tchar.h>
#include <cstdlib>
#include <SDKDDKVer.h>
#include "time.h"
#include "math.h"
#include "ffh.h"
namespace Проект 2 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
/// <summary>
/// Сводка для MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form
{
public:
MyForm(void)
{
InitializeComponent();
//
//TODO: добавьте код конструктора
//
}
protected:
/// <summary>
/// Освободить все используемые ресурсы.
/// </summary>
~MyForm()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
internal: System::Windows::Forms::Button^ button2;
private:
protected:
private: System::Windows::Forms::TextBox^ textBox1;
private: System::Windows::Forms::Label^ label1;
private: System::Windows::Forms::Label^ label2;
private: System::Windows::Forms::Label^ label3;
private: System::Windows::Forms::Label^ label4;
private: System::Windows::Forms::ErrorProvider^ errorProvider1;
private: System::Windows::Forms::ErrorProvider^ errorProvider2;
protected: System::Windows::Forms::DataGridView^ dataGridView1;
private:
private: System::Windows::Forms::Label^ label5;
private: System::Windows::Forms::TextBox^ textBox2;
private: System::Windows::Forms::Button^ button3;
private: System::Windows::Forms::TextBox^ textBox3;
private: System::Windows::Forms::Button^ button4;
private: System::Windows::Forms::PictureBox^ pictureBox1;
private: System::Windows::Forms::Label^ label6;
private: System::ComponentModel::IContainer^ components;
private:
/// <summary>
/// Обязательная переменная конструктора.
/// </summary>
#pragma region Windows Form Designer generated code
/// <summary>
/// Требуемый метод для поддержки конструктора - не изменяйте
/// содержимое этого метода с помощью редактора кода.
/// </summary>
void InitializeComponent(void)
{
this->components = (gcnew System::ComponentModel::Container());
System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(MyForm::typeid));
this->button1 = (gcnew System::Windows::Forms::Button());
this->button2 = (gcnew System::Windows::Forms::Button());
this->textBox1 = (gcnew System::Windows::Forms::TextBox());
this->label1 = (gcnew System::Windows::Forms::Label());
this->label2 = (gcnew System::Windows::Forms::Label());
this->label3 = (gcnew System::Windows::Forms::Label());
this->label4 = (gcnew System::Windows::Forms::Label());
this->errorProvider1 = (gcnew System::Windows::Forms::ErrorProvider(this->components));
this->errorProvider2 = (gcnew System::Windows::Forms::ErrorProvider(this->components));
this->button3 = (gcnew System::Windows::Forms::Button());
this->textBox2 = (gcnew System::Windows::Forms::TextBox());
this->label5 = (gcnew System::Windows::Forms::Label());
this->dataGridView1 = (gcnew System::Windows::Forms::DataGridView());
this->textBox3 = (gcnew System::Windows::Forms::TextBox());
this->label6 = (gcnew System::Windows::Forms::Label());
this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
this->button4 = (gcnew System::Windows::Forms::Button());
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->errorProvider1))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->errorProvider2))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->dataGridView1))->BeginInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->BeginInit();
this->SuspendLayout();
//
// button1
//
this->button1->BackColor = System::Drawing::Color::Lime;
this->button1->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Center;
this->button1->Cursor = System::Windows::Forms::Cursors::Hand;
this->button1->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
this->button1->ForeColor = System::Drawing::Color::Red;
this->button1->Location = System::Drawing::Point(294, 130);
this->button1->Margin = System::Windows::Forms::Padding(4);
this->button1->Name = L"button1";
this->button1->Size = System::Drawing::Size(182, 60);
this->button1->TabIndex = 0;
this->button1->Text = L"Создание матрицы";
this->button1->TextImageRelation = System::Windows::Forms::TextImageRelation::ImageBeforeText;
this->button1->UseVisualStyleBackColor = false;
this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);
//
// button2
//
this->button2->AccessibleRole = System::Windows::Forms::AccessibleRole::Grip;
this->button2->Anchor = static_cast<System::Windows::Forms::AnchorStyles>(((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom)
| System::Windows::Forms::AnchorStyles::Left));
this->button2->AutoSizeMode = System::Windows::Forms::AutoSizeMode::GrowAndShrink;
this->button2->BackColor = System::Drawing::Color::Lime;
this->button2->Cursor = System::Windows::Forms::Cursors::Hand;
this->button2->FlatStyle = System::Windows::Forms::FlatStyle::Popup;
this->button2->ForeColor = System::Drawing::Color::Black;
this->button2->Location = System::Drawing::Point(594, 603);
this->button2->Margin = System::Windows::Forms::Padding(1);
this->button2->Name = L"button2";
this->button2->Size = System::Drawing::Size(104, 40);
this->button2->TabIndex = 1;
this->button2->Text = L"Выход";
this->button2->TextImageRelation = System::Windows::Forms::TextImageRelation::ImageBeforeText;
this->button2->UseVisualStyleBackColor = false;
this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);
//
// textBox1
//
this->textBox1->ForeColor = System::Drawing::SystemColors::ControlText;
this->textBox1->Location = System::Drawing::Point(246, 96);
this->textBox1->Margin = System::Windows::Forms::Padding(4);
this->textBox1->Name = L"textBox1";
this->textBox1->Size = System::Drawing::Size(295, 26);
this->textBox1->TabIndex = 2;
this->textBox1->TextChanged += gcnew System::EventHandler(this, &MyForm::textBox1_TextChanged);
//
// label1
//
this->label1->AutoSize = true;
this->label1->Font = (gcnew System::Drawing::Font(L"Times New Roman", 15));
this->label1->ForeColor = System::Drawing::Color::Black;
this->label1->Location = System::Drawing::Point(287, 9);
this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
this->label1->Name = L"label1";
this->label1->Size = System::Drawing::Size(189, 22);
this->label1->TabIndex = 8;
this->label1->Text = L"ОБХОД В ГЛУБИНУ";
this->label1->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
this->label1->Click += gcnew System::EventHandler(this, &MyForm::label1_Click);
//
// label2
//
this->label2->AutoSize = true;
this->label2->BackColor = System::Drawing::Color::Firebrick;
this->label2->Font = (gcnew System::Drawing::Font(L"Times New Roman", 13.8F, System::Drawing::FontStyle::Italic, System::Drawing::GraphicsUnit::Point,
static_cast<System::Byte>(204)));
this->label2->ForeColor = System::Drawing::Color::Black;
this->label2->Location = System::Drawing::Point(50, 96);
this->label2->Margin = System::Windows::Forms::Padding(4, 0, 4, 0);
this->label2->Name = L"label2";
this->label2->Size = System::Drawing::Size(182, 48);
this->label2->TabIndex = 879;
this->label2->Tag = L"88";
this->label2->Text = L"Количество вершин:\r\n\r\n";
this->label2->UseCompatibleTextRendering = true;
this->label2->Click += gcnew System::EventHandler(this, &MyForm::label2_Click);
//
// label3
//
this->label3->AutoSize = true;
this->label3->ForeColor = System::Drawing::Color::Black;
this->label3->Location = System::Drawing::Point(12, 452);
this->label3->Name = L"label3";
this->label3->Size = System::Drawing::Size(147, 19);
this->label3->TabIndex = 880;
this->label3->Text = L"Старшая вершина:\r\n";
this->label3->Click += gcnew System::EventHandler(this, &MyForm::label3_Click);
//
// label4
//
this->label4->AutoSize = true;
this->label4->ForeColor = System::Drawing::Color::Black;
this->label4->Location = System::Drawing::Point(32, 194);
this->label4->Name = L"label4";
this->label4->Size = System::Drawing::Size(170, 19);
this->label4->TabIndex = 884;
this->label4->Text = L"Матрица смежности:";
this->label4->Click += gcnew System::EventHandler(this, &MyForm::label4_Click);
//
// errorProvider1
//
this->errorProvider1->ContainerControl = this;
//
// errorProvider2
//
this->errorProvider2->ContainerControl = this;
//
// button3
//
this->button3->BackColor = System::Drawing::Color::Lime;
this->button3->ForeColor = System::Drawing::Color::Black;
this->button3->Location = System::Drawing::Point(246, 503);
this->button3->Name = L"button3";
this->button3->Size = System::Drawing::Size(75, 23);
this->button3->TabIndex = 886;
this->button3->Text = L"Поиск";
this->button3->UseVisualStyleBackColor = false;
this->button3->Click += gcnew System::EventHandler(this, &MyForm::button3_Click);
//
// textBox2
//
this->textBox2->Location = System::Drawing::Point(181, 452);
this->textBox2->Name = L"textBox2";
this->textBox2->Size = System::Drawing::Size(150, 26);
this->textBox2->TabIndex = 887;
this->textBox2->TextChanged += gcnew System::EventHandler(this, &MyForm::textBox2_TextChanged_1);
//
// label5
//
this->label5->AutoSize = true;
this->label5->ForeColor = System::Drawing::Color::Black;
this->label5->Location = System::Drawing::Point(12, 554);
this->label5->Name = L"label5";
this->label5->Size = System::Drawing::Size(127, 19);
this->label5->TabIndex = 888;
this->label5->Text = L"Обход в глубину:\r\n";
this->label5->Click += gcnew System::EventHandler(this, &MyForm::label5_Click);
//
// dataGridView1
//
this->dataGridView1->BackgroundColor = System::Drawing::Color::WhiteSmoke;
this->dataGridView1->ColumnHeadersHeightSizeMode = System::Windows::Forms::DataGridViewColumnHeadersHeightSizeMode::AutoSize;
this->dataGridView1->GridColor = System::Drawing::SystemColors::ActiveCaptionText;
this->dataGridView1->Location = System::Drawing::Point(57, 226);
this->dataGridView1->Name = L"dataGridView1";
this->dataGridView1->Size = System::Drawing::Size(295, 204);
this->dataGridView1->TabIndex = 890;
this->dataGridView1->CellContentClick += gcnew System::Windows::Forms::DataGridViewCellEventHandler(this, &MyForm::dataGridView1_CellContentClick);
//
// textBox3
//
this->textBox3->Location = System::Drawing::Point(181, 554);
this->textBox3->Name = L"textBox3";
this->textBox3->Size = System::Drawing::Size(150, 26);
this->textBox3->TabIndex = 891;
this->textBox3->TextChanged += gcnew System::EventHandler(this, &MyForm::textBox3_TextChanged);
//
// label6
//
this->label6->AutoSize = true;
this->label6->ForeColor = System::Drawing::Color::Black;
this->label6->Location = System::Drawing::Point(386, 194);
this->label6->Name = L"label6";
this->label6->Size = System::Drawing::Size(142, 19);
this->label6->TabIndex = 892;
this->label6->Text = L"Прорисовка графа:\r\n";
//
// pictureBox1
//
this->pictureBox1->BackColor = System::Drawing::Color::White;
this->pictureBox1->Location = System::Drawing::Point(370, 226);
this->pictureBox1->Name = L"pictureBox1";
this->pictureBox1->Size = System::Drawing::Size(358, 354);
this->pictureBox1->TabIndex = 893;
this->pictureBox1->TabStop = false;
//
// button4
//
this->button4->BackColor = System::Drawing::Color::Lime;
this->button4->ForeColor = System::Drawing::Color::Black;
this->button4->Location = System::Drawing::Point(594, 194);
this->button4->Name = L"button4";
this->button4->Size = System::Drawing::Size(75, 26);
this->button4->TabIndex = 894;
this->button4->Text = L"Рисуем\r\n";
this->button4->UseVisualStyleBackColor = false;
this->button4->Click += gcnew System::EventHandler(this, &MyForm::button4_Click);
//
// MyForm
//
this->AutoScaleDimensions = System::Drawing::SizeF(9, 19);
this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
this->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(192)), static_cast<System::Int32>(static_cast<System::Byte>(0)),
static_cast<System::Int32>(static_cast<System::Byte>(0)));
this->BackgroundImageLayout = System::Windows::Forms::ImageLayout::Stretch;
this->ClientSize = System::Drawing::Size(740, 733);
this->Controls->Add(this->button4);
this->Controls->Add(this->pictureBox1);
this->Controls->Add(this->label6);
this->Controls->Add(this->textBox3);
this->Controls->Add(this->dataGridView1);
this->Controls->Add(this->label5);
this->Controls->Add(this->textBox2);
this->Controls->Add(this->button3);
this->Controls->Add(this->label4);
this->Controls->Add(this->label3);
this->Controls->Add(this->label2);
this->Controls->Add(this->label1);
this->Controls->Add(this->textBox1);
this->Controls->Add(this->button2);
this->Controls->Add(this->button1);
this->Font = (gcnew System::Drawing::Font(L"Times New Roman", 12, static_cast<System::Drawing::FontStyle>((System::Drawing::FontStyle::Bold | System::Drawing::FontStyle::Italic)),
System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(204)));
this->ForeColor = System::Drawing::Color::PeachPuff;
this->Icon = (cli::safe_cast<System::Drawing::Icon^>(resources->GetObject(L"$this.Icon")));
this->Margin = System::Windows::Forms::Padding(4);
this->Name = L"MyForm";
this->Text = L"Обход в глубину";
this->TransparencyKey = System::Drawing::Color::Yellow;
this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->errorProvider1))->EndInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->errorProvider2))->EndInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->dataGridView1))->EndInit();
(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->pictureBox1))->EndInit();
this->ResumeLayout(false);
this->PerformLayout();
}
#pragma endregion
private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void label1_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void label2_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Single Nachalo;
bool Proverka = Single::TryParse(textBox1->Text,
System::Globalization::NumberStyles::Number,
System::Globalization::NumberFormatInfo::CurrentInfo, Nachalo);;
if (Proverka == false) {
MessageBox::Show(
"Ошибка ввода",
"Сообщение",
MessageBoxButtons::OK,
MessageBoxIcon::Information);
return;
}
if (Nachalo <=0) {
MessageBox::Show(
"Ошибка ввода",
"Сообщение",
MessageBoxButtons::OK,
MessageBoxIcon::Information);
return;
}
int **mass = new int *[Nachalo];
for (int i = 0; i < Nachalo; i++)
{
mass[i] = new int[Nachalo];
}
dataGridView1->ColumnCount = Nachalo;
dataGridView1->RowCount = Nachalo;
for (int i = 0; i < Nachalo; i++)
{
for (int j = 0; j < Nachalo; j++)
{
mass[i][j] = Convert::ToDouble(dataGridView1->Rows[i]->Cells[j]->Value);
}
}
for (int i; i<Nachalo; i++)
{
for (int j = 0; j < Nachalo; j++)
{
dataGridView1->TopLeftHeaderCell->Value = "Матрица смежности";
dataGridView1->Columns[j]->HeaderCell->Value = Convert::ToString(j + 1);
dataGridView1->Rows[i]->HeaderCell->Value = Convert::ToString(i + 1);
dataGridView1->Rows[i]->Cells[j]->Value = mass[i][j];
}
}
dataGridView1->AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode::AutoSizeToAllHeaders);
dataGridView1->AutoResizeColumns();
for (int i = 0; i < Nachalo; i++)
{
delete[] mass[i];
}
delete[] mass;
}
private: System::Void textBox2_TextChanged(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void listBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
Application::Exit();
}
private: System::Void label4_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void numericUpDown1_ValueChanged(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void label3_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void label5_Click(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
Single Nachalo;
bool Proverka = Single::TryParse(textBox1->Text,
System::Globalization::NumberStyles::Number,
System::Globalization::NumberFormatInfo::CurrentInfo, Nachalo);;
Single Starsh;
bool Proverka1 = Single::TryParse(textBox2->Text,
System::Globalization::NumberStyles::Number,
System::Globalization::NumberFormatInfo::CurrentInfo, Starsh);;
A = new int*[Nachalo];
for (int i = 0; i < Nachalo; i++) {
A[i]= new int[Nachalo];
}
for (int i = 0; i < Nachalo; i++) {
for (int j = 0; j < Nachalo; j++){
A[i][j] = Convert::ToInt32(dataGridView1->Rows[i]->Cells[j]->Value);
}
}
Nachalo1 = Nachalo;
if (Proverka1 == false) {
MessageBox::Show(
"Ошибка ввода",
"Сообщение",
MessageBoxButtons::OK,
MessageBoxIcon::Information);
return;
}
if (Starsh<= 0) {
MessageBox::Show(
"Ошибка ввода",
"Сообщение",
MessageBoxButtons::OK,
MessageBoxIcon::Information);
return;
}
graph = new int*[Nachalo];
for (int i = 0; i < Nachalo; i++) {
graph[i] = new int[Nachalo];
}
Header a;
a.Show(Starsh,Nachalo);
for (int p = 0; p < s; p++)
textBox3->Text += Convert::ToString(otvet[p]);
}
private: System::Void textBox2_TextChanged_1(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void textBox3_TextChanged(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void dataGridView1_CellContentClick(System::Object^ sender, System::Windows::Forms::DataGridViewCellEventArgs^ e) {
}
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
int *a, *b;
int n = System::Convert::ToDouble(textBox1->Text);
int i = 0;
unsigned c = 0;
A = new int*[n];
for (int i = 0; i < n; i++) {
A[i] = new int[n];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
A[i][j] = Convert::ToInt32(dataGridView1->Rows[i]->Cells[j]->Value);
}
}
int j, z, x, k = 0;
int u[10];
srand(time(0));
x = 0;
Graphics^ gr = this->pictureBox1->CreateGraphics();
a = (int*)malloc(n * sizeof(int));
b = (int*)malloc(n * sizeof(int));
for (int c1 = 0; c1<n; c1++)
{
int secret = rand() % 8;
c = c + 1;
srand(c);
if (secret == 0)
{
a[c1] = 100 + secret * 20;
b[c1] = 100 + secret * 20;
}
if (secret == 1)
{
a[c1] = 300 - secret * 20;
b[c1] = 300 + secret * 20;
}
if (secret == 2)
{
a[c1] = 400 - secret * 10;
b[c1] = 400 - secret * 10;
}
if (secret == 3)
{
a[c1] = 400 - secret * 10;
b[c1] = 50 - secret * 10;
}
if (secret == 4)
{
a[c1] = 300 - secret * 15;
b[c1] = 100 + secret * 15;
}
if (secret == 5)
{
a[c1] = 200 + secret * 5;
b[c1] = 350 - secret * 10;
}
if (secret == 6)
{
a[c1] = 35 + secret * 10;
b[c1] = 350 + secret * 15;
}
if (secret == 7)
{
a[c1] = 400 - secret * 20;
b[c1] = 150 - secret * 5;
}
}
int counter = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
String^ Text = Text->Format("{0} ", j + 1);
String^ Loop = Text->Format("{0}", A[i][j]);
Brush^ Кисть = gcnew SolidBrush(Color::DarkGreen);
Brush^ неКисть = gcnew SolidBrush(Color::DarkGreen);
if (i == 0 && j == 0)
{
gr->DrawString(Text, Font, Кисть, a[i], b[j]);
gr->DrawEllipse(System::Drawing::Pens::Green, a[i] - 2, b[j] - 2, 4, 4);
}
gr->TextRenderingHint = System::Drawing::Text::TextRenderingHint::AntiAlias;
if (i == counter && j != 0)
{
gr->DrawString(Text, Font, Кисть, a[j], b[j]);
gr->DrawEllipse(System::Drawing::Pens::YellowGreen, a[j] - 2, b[j] - 2, 4, 4);
if (A[i][j] != 0)
{
gr->DrawLine(System::Drawing::Pens::YellowGreen, a[i], b[i], a[j], b[j]);
gr->DrawEllipse(System::Drawing::Pens::YellowGreen, a[i] - 2, b[i] - 2, 4, 4);
gr->DrawString(Text, Font, Кисть, a[j], b[j]);
gr->DrawString(Loop, Font, неКисть, (a[j] + a[i]) / 2, (b[j] + b[i]) / 2);
}
}
}
counter++;
}
}
};
}
Файл ffh.h
#pragma once
#include <cstdio>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include <stdio.h>
#include <vector>
#include "MyForm.h"
class Header {
private:
int i, j;
public:
void Show(int start, int Nachalo);
void DFS(std::vector<bool> &visited, int unit);
};
int Nachalo1;
int **graph;
int *otvet = new int[Nachalo1];
int s=0;
void Header::DFS(std::vector<bool> &visited, int unit) {
std::vector <int> queue(Nachalo1, 0);
int count = 0;
int head = 0;
queue[count++] = unit; //стартовая вершина помещается в "очередь"
visited[unit] = true; //вершина помечается как посещенная
unit = queue[head++];
otvet[s] = unit+1;
s++;
int to = 0;
for (i = 0; i < Nachalo1; i++) {
if ((graph[unit][i] != 0) && (!visited[i])) {
DFS(visited, i);
}
}
}
void Header::Show(int start, int Nachalo) {
std::vector <bool> visited(Nachalo);
DFS(visited, start - 1);
return;
}
Приложение В. Результаты работы программы
Рисунок 4.4 - Результаты работы программы
Рисунок 4.5 - Результаты работы программы
Размещено на Allbest.ru
...Подобные документы
Способ представления графа в информатике. Алгоритмы поиска элементарных циклов в глубину в неориентированных графах. Описание среды wxDev-C++, последовательность создания проекта. Руководство пользователю программы поиска и вывода на экран простых циклов.
курсовая работа [783,2 K], добавлен 18.02.2013Характеристика структурированного языка программирования С, его основных структурных компонентов, области памяти, библиотеки. Методы поиска в массивах данных. Описание программы, функции сортировки и меню выбора, последовательного и бинарного поиска.
курсовая работа [1,7 M], добавлен 19.05.2014Применение теории графов и алгоритмов на графах среди дисциплин и методов дискретной математики. Граф как совокупность двух множеств. Основные способы численного представления графа. Элементы и изоморфизмы графов. Требования к представлению графов в ЭВМ.
курсовая работа [162,2 K], добавлен 04.02.2011Способы построения остовного дерева (алгоритма поиска в глубину и поиска в ширину). Вид неориентированного графа. Понятие и алгоритмы нахождения минимальных остовных деревьев. Последовательность построения дерева графов по алгоритмам Крускала и Прима.
презентация [22,8 K], добавлен 16.09.2013Основные критерии и требования к средствам поиска по ресурсу. Технологии создания инструментов поиска. Способы поиска по ресурсу. Принцип действия поиска по ключевым словам и при помощи поисковых систем. Разработка ресурса "Поиск по ресурсу" в виде блога.
курсовая работа [983,7 K], добавлен 01.02.2015Исследование базовых концепций программирования приложений под операционную систему Windows. Изучение истории создания универсального языка программирования Си. Разработка графического пользовательского интерфейса. Обзор правил игры и алгоритма работы.
курсовая работа [58,2 K], добавлен 09.11.2012Принципы создания приложений с GUI. Панель инструментов для добавления элементов интерфейса. Расположение кнопки и осей в окне приложения. Управление свойствами объектов. Установка свойств при редактировании. Программное изменение свойств. Флаги и рамки.
методичка [1,1 M], добавлен 06.07.2009Теоретические сведения об алгоритмах поиска подстроки в строке. Глобализация информации в сети Internet. Интеллектуальный поиск. Алгоритм последовательного (прямого) поиска, Рабина и их применение. Анализ алгоритмов. Реализация программного кода.
курсовая работа [230,8 K], добавлен 12.02.2009Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.
курсовая работа [2,8 M], добавлен 27.01.2010Задачи компьютерного зрения. Анализ, разработка и реализация алгоритмов поиска и определения движения объекта, его свойств и характеристик. Алгоритмы поиска и обработки найденных областей движения. Метод коррекции. Нахождение объекта по цветовому диапазон
статья [2,5 M], добавлен 29.09.2008История создания семейства операционных систем Windows корпорации Microsoft, ориентированных на применение графического интерфейса при управлении приложениями. Выход первой версии браузера Internet Explorer, расширение мультимедийных возможностей ОС.
курсовая работа [52,8 K], добавлен 09.12.2014Обоснование выбора языка и среды программирования. Обзор и анализ существующих программных решений. Разработка графического и пользовательского интерфейса. Алгоритм бинарного поиска. Методы добавления, удаления элемента из дерева и вывода на экран.
курсовая работа [1,3 M], добавлен 31.05.2016Бинарные деревья поиска, основные действия с ними. Сущность префиксного (прямого), инфиксного (симметричного) и постфиксного (обратного) обхода в глубину. Описание функций редактирования исходных данных. Листинг и текст программы Form 1 и Form 2.
курсовая работа [1,7 M], добавлен 08.06.2014Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Проектирование программного обеспечения для создания баз данных о работах студентов университета при помощи языка Visual Basic. Разработка интерфейса пользователя. Руководство для системного программиста. Краткое описание алгоритма работы с программой.
курсовая работа [2,6 M], добавлен 19.03.2010Реализация комплекса программ поиска подстроки в тексте алгоритмом прямого поиска и алгоритмом Кнута-Морриса-Пратта. Сравнительный анализ теоретических и экспериментальных оценок эффективности алгоритмов. Разработка структуры программы, ее листинг.
курсовая работа [2,8 M], добавлен 22.01.2015Изучение основных алгоритмов генерации различных видов фракталов. Выбор языка и среды программирования. Характеристика структурных элементов растрового графического редактора фракталов. Описание интерфейса приложения, порядок редактирования изображений.
курсовая работа [1,2 M], добавлен 04.04.2014Создание программы, работающей с набором данных на внешнем устройстве. Описание программного комплекса. Обзор структуры главной программы. Процедура добавления новых элементов, поиска и создания на экране вертикального меню. Проверка работы программы.
курсовая работа [265,6 K], добавлен 28.08.2017Диаграмма консольного приложения табулирования функции. Отличие консольного приложения и приложения и GUI. Диаграмма классов для JFrameи JPanel. Создание простейшего фрейма в Java. Компоновка элементов интерфейса внутри фрейма. Цикл обработки событий.
лекция [693,8 K], добавлен 01.05.2014Обзор используемых веб-технологий: языка HTML и PHP, таблиц CSS, базы данных MySQL. Написание веб-приложения для продвижения и распространения информации об ученом, а так же создания диалога с людьми, не имеющими возможности связаться с ученым в живую.
курсовая работа [504,5 K], добавлен 02.06.2015