Реализация алгоритма Прима c использованием множеств
Лабораторная работа, 14 Февраля 2012, автор: пользователь скрыл имя
Описание работы
При проектировании железных дорог, линий электропередачи и других линий коммуникации возникает проблема построения сети с минимальными затратами. В теории графов такая задача может решается путем построения минимального остовного дерева неориентированного графа. Данная задача имеет несколько методов решения. Один из них – алгоритм Прима.
Содержание
Введение 3
Постановка задачи 4
Руководство пользователя 5
Руководство программиста 6
Описание структур данных 6
Описание алгоритмов 6
Описание структуры программы 6
Заключение 7
Литература 8
Работа содержит 1 файл
отчёт по лабораторной работе..Цветковой надежды.doc
— 936.50 Кб (Скачать)Федеральное агентство по образованию Российской Федерации
Государственное образовательное учреждение
высшего профессионального образования
Нижегородский
государственный университет
Факультет
вычислительной математики и кибернетики
Отчёт по
лабораторной работе
Реализация алгоритма Прима
c использованием
множеств
Выполнил:
студентка ф-та ВМК гр. 82-11
Цветкова
Н.Ю.
Проверил:
ассистент каф. МО ЭВМ, ВМК
Козинов
Е.А.
Нижний Новгород
2011 г.
Содержание
Введение
При проектировании железных дорог, линий электропередачи и других линий коммуникации возникает проблема построения сети с минимальными затратами.
В теории графов такая задача может решается путем построения минимального остовного дерева неориентированного графа. Данная задача имеет несколько методов решения. Один из них – алгоритм Прима.
Суть этого метода заключается
в последовательном добавлении
к остову минимального, «безопасного»
ребра (ребра, которое не
Постановка задачи
- Необходимо выполнить реализацию алгоритма Прима
Задача
поиска минимального остовного дерева
с помощью алгоритма Прима состоит в нахождении
для заданого графа остовного дерева наименьшей
стоимости.
- Необходимо использовать в реализации битовые поля и множества
Использовать в реализации алгоритма два класса:
- Класс TBitField – битовые поля
- Класс TSet – множества(реализация через битовые поля)
Завести 3 множества:
множество начальных вершин графа,
множество конечных вершин графа, множество
ребер;
- Реализовать алгоритм в используя windows form c++
Необходимо использовать инструменты windows form:
- textBox – для ввода количества вершин графа
- dataGridView – для ввода матрицы смежности и для вывода полученной матрицы
- button – кнопки для использования остальных элементов формы
- panel – для рисования исходного графа и вывода полученного остовного дерева
В результате лабораторной работы должны получить программу в Microsoft visual studio, которая выполняет алгоритм Прима и в результате своей работы выводит на экран минимальное остовное дерево исходного графа.
Руководство пользователя
- Запустите файл программы поиска минимального остовного дерева методом Прима.
- На экране вы видите окно windows form1(рис.1)
Рисунок 1
- Нужно ввести количество вершин исходного графа (рис.2)
Рисунок 2
- Затем вводите матрицу смежности (рис.3)
Рисунок 3
- Нажимайте на кнопку «Ввод матрицы» и на панели рисования появляется нарисованный исходный граф (рис.4)
Рисунок 4
- Затем нажимайте «Алгоритм прима» и в результате на экране form1 появляется новая матрица смежности, полученная в результате алгоритма Прима
- Нажимайте на «Нарисовать остовное дерево», получайте требуемый результат – рисуется минимальное остовное дерево.
- Закрывает программу
Руководство программиста
Описание структуры программы
- Ввод данных
- Ввод числа вершин исходного графа.
Реализуется с помощью объекта windows form - TextBox
n=Convert::ToInt32(this->
- Ввод матрицы смежности
Реализуется с помощью объекта windows form - dataGridView
this->dataGridView1->RowCount = n;
this->dataGridView1->
- Изображение графа
Для изображения графа на экране используем объект windows form – panel.
А
так же для вывода графа на экран
кнопку button
int x = 133, y = 121, r = 100;
Graphics ^g = e->Graphics;
g->DrawEllipse(GrayPen, x-r, y-r, 2*r, 2*r );
int i, j;
for (i = 0; i<n; i++){
g->DrawEllipse(BlackPen1,
x+r*cos(6.28*i/n),y+r*sin(6.
for (j=i+1; j<n; j++)
if (a[i][j]>0) g->DrawLine(BlackPen2,
int(x+r*cos(6.28*i/n)),int(y+
int(x+r*cos(6.28*j/n)),int(y+
- Получение данных из таблицы смежности
//получаем размер матрицы смежности
n=Convert::ToInt32(this->
for(int i=0;i<n;i++){
a[i] = new int [n];
for(int j=0;j<n;j++)
//заводим матрицу смежности, используя данные, введенные пользователем
a[i][j] = Convert::ToInt32(
- Ввод данных в таблицу смежности остовного графа из массива
//задаем размер таблицы
this->dataGridView2->RowCount = n;
this->dataGridView2->
for (i = 0; i < n; i++){
for (j = 0; j < n; j++){
//заполняем элементы таблицы полученными данными
dataGridView2->Rows[i]->Cells[
dataGridView2->Rows[i]->Cells[
}}
Описание структур данных
- Глобальные переменные:
var.h
#pragma once
extern int n,**a,**b;
var.cpp
#include "stdafx.h"
#include "Var.h"
int n;//кол-во вершин в графе
int **a = new int *[n];//массив матрицы смежности
int **b = new int *[n];//массив
матрицы смежности остовного дерева
- Структура классов
- Класс битовых полей
class TBitFiield
{private:
int BitLen;
TELEM *pMem;
int MemLen;
int GetMemIndex( int n);
TELEM GetMemMask(int n);
public:
TBitFiield(int len);
TBitFiield(TBitFiield &bf);
~TBitFiield();
//доступ к битам
int GetLength(void);
void SetBit(int n);
void ClrBit(int n);
int GetBit(int n);};
- Класс - множества
#include "TBitFiield.h"
class TSet
{
private:
int MaxPower;
TBitFiield BitFiield;
public:
TSet(int mp);
TSet(TSet &s);
TSet(TBitFiield &bf);
operator TBitFiield();
int GetMaxPower(void);