Автор: Пользователь скрыл имя, 14 Февраля 2012 в 10:13, лабораторная работа
При проектировании железных дорог, линий электропередачи и других линий коммуникации возникает проблема построения сети с минимальными затратами. В теории графов такая задача может решается путем построения минимального остовного дерева неориентированного графа. Данная задача имеет несколько методов решения. Один из них – алгоритм Прима.
Введение 3
Постановка задачи 4
Руководство пользователя 5
Руководство программиста 6
Описание структур данных 6
Описание алгоритмов 6
Описание структуры программы 6
Заключение 7
Литература 8
Федеральное агентство по образованию Российской Федерации
Государственное образовательное учреждение
высшего профессионального образования
Нижегородский
государственный университет
Факультет
вычислительной математики и кибернетики
Отчёт по
лабораторной работе
Реализация алгоритма Прима
c использованием
множеств
Выполнил:
студентка ф-та ВМК гр. 82-11
Цветкова
Н.Ю.
Проверил:
ассистент каф. МО ЭВМ, ВМК
Козинов
Е.А.
Нижний Новгород
2011 г.
Содержание
При проектировании железных дорог, линий электропередачи и других линий коммуникации возникает проблема построения сети с минимальными затратами.
В теории графов такая задача может решается путем построения минимального остовного дерева неориентированного графа. Данная задача имеет несколько методов решения. Один из них – алгоритм Прима.
Суть этого метода заключается
в последовательном добавлении
к остову минимального, «безопасного»
ребра (ребра, которое не
Задача
поиска минимального остовного дерева
с помощью алгоритма Прима состоит в нахождении
для заданого графа остовного дерева наименьшей
стоимости.
Использовать в реализации алгоритма два класса:
Завести 3 множества:
множество начальных вершин графа,
множество конечных вершин графа, множество
ребер;
Необходимо использовать инструменты windows form:
В результате лабораторной работы должны получить программу в Microsoft visual studio, которая выполняет алгоритм Прима и в результате своей работы выводит на экран минимальное остовное дерево исходного графа.
Рисунок 1
Рисунок 2
Рисунок 3
Рисунок 4
Реализуется с помощью объекта 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);
Информация о работе Реализация алгоритма Прима c использованием множеств