Поиск в графах: теория и практика

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 22.02.2019
Размер файла 6,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования Российской Федерации

Пензенский государственный университет

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

По курсу: «Логика и основы алгоритмизации в инженерных задачах»

На тему «Поиск в графах»

Кузнецов А.С.

Пенза 2017

Содержание

Введение

1. Постановка задачи

2. Теоретическая часть

3. Описание программы

4. Отладка и тестирование

Заключение

Список используемых источников

Приложение

Введение

Поиск в глубину -- хороший инструмент для исследования топологических свойств графов. Например:

· В качестве подпрограммы в алгоритмах поиска одно идвусвязныхкомпонент.

· Втопологической сортировке.

· Для поискаточек сочленения,мостов.

· В различных расчётах на графах. Например, как часть алгоритма Диницапоиска максимального потока.

Поиск в глубину -- естественный выбор, когда агент (человек или робот) лично ходит по лабиринту.

1. Постановка задачи

Написать программу для поиска всех путей в глубину.

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

Для удобства использования программы должен быть разработан графический интерфейс с возможностью ввода и вывода информации.

Устройствами ввода информации являются клавиатура и мышь.

Программа должна быть разработана для работы в ОСMicrosoftWindows.

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. Есть мнение, что это затрудняет понимание кода.

В качестве среды программирования был выбран программный продукт от компанииMicrosoftVisualStudio 2013.

Для создания графического интерфейса использовались приложения WindowsForm.

Интерфейс очень прост и состоит из не большего числа элементов, это кнопка генерации матрицы,кнопка запуска поиска,кнопка выхода из программы кнопка прорисовки графа,pictureBoxдля прорисовки, textbox:для задания количества вершин,для ввода стартовой вершины,для вывода информации;MessageBoxдля вывода ошибок,dataGridViewдля ввода матрицы.(Рис.3.1)

Рисунок 3.1 - Окно программы

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

Блок-схема программ (Рис. 3.2) показывает, как работает программа. После запуском основной функции поиска, инициализируется массив которые будут хранить информацию о заданном графе. Массив «Nachalo1» хранит массив матрицы смежности.

Рисунок 3.2 - Схема работы программы

4. Отладка и тестирование

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

Тестирование проводилось в процессе разработки и после написания программы.

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

Рисунок 4.1 - Сообщение об ошибке

При вводе целого положительно числа, происходит вывод программнойвершин. (Рис 4.2-4.3) Если ввести иные символы, выведется сообщение об ошибке приведенное выше.

Программа была протестированна на корректность вводимых значений. Результаты тестирования представленны на рисунках 4.2 - 4.3.

Рисунок 4.2 - Результаты тестирования программы

Рисунок 4.3 - Результаты тестирования программы

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

Заключение

При выполнении данной курсовой работы были получены базовые навыки программирования на языках С++, усовершенствованы навыки разработки многомодульных программ.Изучены основные возможности среды программирования VisualStudio 2013, получены навыки отладки и тестирования программ. Были рассмотрены некоторые функции из стандартной библиотеки языка С++. Были изучены базовые алгоритмы обработки данных. графический интерфейс тестирование программа

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

Список используемых источников

1. Шилдт Г. Искусство программирования на C++. БХВ.2005

2. P.Лафоре - «Объектно-ориентированное программирование в С++»

3. Ф.Новиков - «Дискретная математика»

4. Р.Стивенс - «Алгоритмы. Теория и практическое применение»

Приложение

Листинги программы

ФайлMyFrom.cpp

#include"MyForm.h"

usingnamespace System;

usingnamespace 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>

voidInitializeComponent(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;

boolProverka = 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;

boolProverka = 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^ Кисть = gcnewSolidBrush(Color::DarkGreen);

Brush^ неКисть = gcnewSolidBrush(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

#pragmaonce

#include<cstdio>

#include<stdlib.h>

#include<conio.h>

#include<iostream>

#include<stdio.h>

#include<vector>

#include"MyForm.h"

classHeader {

private:

int i, j;

public:

void Show(intstart, intNachalo);

void DFS(std::vector<bool>&visited, intunit);

};

int Nachalo1;

int **graph;

int *otvet = newint[Nachalo1];

int s=0;

voidHeader::DFS(std::vector<bool>&visited, intunit) {

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);

}

}

}

voidHeader::Show(intstart, intNachalo) {

std::vector<bool>visited(Nachalo);

DFS(visited, start - 1);

return;

}

Приложение

Результаты работы программы:

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

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

Размещено на Allbest.ru

...

Подобные документы

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

    курсовая работа [234,6 K], добавлен 27.12.2014

  • Характеристика структурированного языка программирования С, его основных структурных компонентов, области памяти, библиотеки. Методы поиска в массивах данных. Описание программы, функции сортировки и меню выбора, последовательного и бинарного поиска.

    курсовая работа [1,7 M], добавлен 19.05.2014

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

    курсовая работа [1,3 M], добавлен 28.07.2013

  • Разработка программы для поиска пути в лабиринте с возможностью задания входа и выхода, наглядное представление решений. Использование языка логического программирования Prolog. Данные и методы решения. Пользовательский интерфейс, листинг программы.

    реферат [14,3 K], добавлен 15.10.2012

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

    лабораторная работа [62,0 K], добавлен 15.07.2010

  • Обоснование выбора языка и среды программирования. Обзор и анализ существующих программных решений. Разработка графического и пользовательского интерфейса. Алгоритм бинарного поиска. Методы добавления, удаления элемента из дерева и вывода на экран.

    курсовая работа [1,3 M], добавлен 31.05.2016

  • Способ представления графа в информатике. Алгоритмы поиска элементарных циклов в глубину в неориентированных графах. Описание среды wxDev-C++, последовательность создания проекта. Руководство пользователю программы поиска и вывода на экран простых циклов.

    курсовая работа [783,2 K], добавлен 18.02.2013

  • Исследование теоретических аспектов разработки программы посредством использования Visual Basic. Анализ достоинств и недостатков данного языка программирования. Изучение особенностей создания интерфейса приложения. Основные этапы реализации программы.

    практическая работа [460,6 K], добавлен 22.01.2013

  • Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.

    курсовая работа [1,5 M], добавлен 08.02.2011

  • Методика разработки программы по поиску информации из базы данных, содержащей информацию о телевизорах. Использование языка программирования "С++" и среды разработки Qt Creator "С++" - статически типизированного языка программирования общего назначения.

    курсовая работа [626,1 K], добавлен 22.12.2011

  • Разработка программы для тестирования студентов в интегрированной среде разработки Lazarus. Создание формы, отображение графического изображения, выхода, ответа, завершения теста. Процесс выбора ответа студентом. Исходный вид программы тестирования.

    курсовая работа [388,4 K], добавлен 23.12.2014

  • Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.

    курсовая работа [19,5 K], добавлен 19.05.2011

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

    курсовая работа [637,7 K], добавлен 14.01.2015

  • Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.

    курсовая работа [506,5 K], добавлен 21.02.2011

  • Требования к составу и параметрам технических средств. Выбор языка программирования. Структурная схема программного продукта. Проектирование пользовательского интерфейса. Создание системы и заполнение базы данных. Разработка форм ввода-вывода информации.

    курсовая работа [1,2 M], добавлен 30.01.2016

  • Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.

    курсовая работа [96,1 K], добавлен 25.06.2013

  • Создание программы для обработки информации об объектах предметной области "Бытовая техника" в среде визуального программирования C++. Иерархия родственных классов. Описание логической структуры программы. Реализация файлового ввода/вывода данных.

    курсовая работа [711,4 K], добавлен 27.07.2014

  • Ознакомление с возможностями языка Си как средой программирования высокого уровня. Циклы программирования параметрического оператора for и функции форматированного ввода. Разработка программы средствами Си: блок-схема, текст и тестирование программы.

    контрольная работа [204,4 K], добавлен 26.01.2013

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

    курсовая работа [265,6 K], добавлен 28.08.2017

  • Разработка структуры базы данных для хранения дипломных проектов в среде объектно-ориентированного программирования Python. Создание внешнего вида окон ввода-вывода информации, технологии переходов. Листинг программы с пояснениями; направления улучшения.

    курсовая работа [3,1 M], добавлен 27.02.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.