Автор: Пользователь скрыл имя, 03 Апреля 2011 в 18:46, курсовая работа
Первая работа по теории графов, принадлежащая известному швейцарскому математику Л. Эйлеру, появилась в 1736 г. Толчок к развитию теория графов получила на рубеже ХIX и ХХ столетий, когда резко возросло число работ в области топологии и комбинаторики, с которыми ее связывают самые тесные узы родства. Графы стали использоваться при построении схем электрических цепей и молекулярных схем. Как отдельная математическая дисциплина теория графов была впервые представлена в работе венгерского математика Кенига в 30-е годы ХХ столетия.
ЗАДАНИЯ. - 2 -
РЕФЕРАТ - 3 -
СОДЕРЖАНИЕ. - 4 -
ВВЕДЕНИЕ - 5 -
1 РАЗРАБОТКА ПРОГРАММЫ ДЛЯ РЕАЛИЗАЦИИ ГРАФА. - 6 -
1.1 АНАЛИЗ МАТЕМАТИЧЕСКИХ ТРЕБОВАНИЙ. - 8 -
1.2 КОДИРОВАНИЕ. - 18 -
1.3 ТЕСТИРОВАНИЕ. - 19 -
ЗАКЛЮЧЕНИЕ. - 21 -
ПРИЛОЖЕНИЕ А. - 22 -
ПРИЛОЖЕНИЕ Б. - 23 -
ПРИЛОЖЕНИЕ В. - 28 -
СПИСОК ЛИТЕРАТУРЫ: - 32 -
в А и в , т. к. G и – обыкновенные графы.
Матрицы смежности вершин А графа и графа , изображённых на рис. 3.1.3, имеют вид:
, .
Правильность построения матрицы можно легко проверить по рис. 3.1.3
Объединение графов G1 и
G2 , обозначаемое как G1
G2 , представляет такой граф G3 = (Х1
Х2, A1
A2), что множество его вершин является
объединением Х1 и Х2 , а множество ребер
– объединением A1 и A2 . ГрафG3 , полученный
операцией объединения графов G1 и G2 , показан
на рис.
2.2.1,д, а его
матрица смежности – на рис.
2.2.1,е. Матрица
смежности результирующего графа
Объединение графов.
Пусть и – произвольные графы. Объединением графов и называется граф со множеством вершин и множеством рёбер .
Операция объединения графов обладает следующими свойствами, которые следуют из её определения и свойств операции объединения множеств:
для любых графов и – свойство коммутативности;
для любых графов , и – свойство ассоциативности.
Операция объединения распространяется на любое конечное число графов по индукции: .
Операция объединения графов может быть выполнена в матричной форме.
Теорема . Пусть и – два графа (ориентированные или неориентированные одновременно), и пусть и – матрицы смежности вершин этих графов. Тогда матрицей смежности вершин графа является матрица А, полученная поэлементным взятием максимального элемента вспомогательных матриц А1¢ и А2¢. Матрицы Аi¢, i=1,2, получаются из с помощью добавления нулевых строк и столбцов, соответствующих вершинам, отсутствующим в , но присутствующим в .
По определению графа его матрица смежности А имеет размерность . Построим вспомогательные графы и . Очевидно, что их матрицами смежности вершин будут и соответственно. Очевидно также, что . Для каждой пары вершин и из V в входит максимальное число рёбер, соединяющих их в и , что и определяет значение элемента матрицы А.
Следствие. Если элементы матриц смежности вершин и графов и принимают только значения 0 и 1, то операция взятия максимального элемента для нахождения матрицы смежности вершин графа соответствует логической сумме элементов.
Соединение графов
Эта операция была введена А.А. Зыковым. Пусть и – два одновременно неориентированных или ориентированных графа с непересекающимися множествами вершин. Соединение графов состоит из и всех рёбер в случае неориентированного графа (пар нестрого параллельных дуг в случае орграфа), соединяющих вершины из с вершинами из . В частности, , по определению полного двудольного графа. Эта операция иллюстрируется на рис. 3.2.1, где и .
Рис. 3.2.1–Соединение графов.
Операция соединения графов обладает следующими свойствами, которые следуют из её определения и свойств операции объединения:
для любых графов и – свойство коммутативности;
для любых графов , и – свойство ассоциативности.
Операцию соединения можно распространить по индукции на любое конечное число графов, все множества вершин которых различны: G1+…+Gn–1+Gn=(G1+…+Gn–1)+Gn.
В программе реализован граф в виде матрице смежности. Использован класс «MatrixGraph». Анализировав требования было разработано меню понятный для пользователя.(приложение «А» рис.А4)
Класс «MatrixGraph».
Переменные класса:
int** graph;– Инициализация динамического массива.
int vertexNumber; Число вершин графа.
Методы класса.
Таблица 2– Методы класса «Polya».
Название | Входные данные | Выходные данные | Описание |
MatrixGraph(); | int | - | Инициализирует динамический массив. |
ShowUnion(); | MatrixGraph a | Void | Вывод на экран объединение двух графов. |
ComplementGraph(); | - | Void | Дополнение графа. |
addArc(); | int from, int to | void | Добавление дуги в граф. |
deleteArc(); | int from, int to | Void | Удаление дуги из граф. |
addNode();
|
int n | Void | Добавление вершины |
deleteNode(); | int n,bool flag | Void | Удаление вершины |
hasArc(); | int from, int to | Int | Проверка на наличие дуги |
Size() | int | Возвращает значение количества вершин. | |
PrintMatrix(); | void | Вывод на экран матрицу смежности графа. |
В функции «Main» инициализируется два графа, и выводиться меню. В меню предложены основные операции над графами.
Код программы проекта приведен в приложении «Б».
В Проекте программа неоднократно тестировалась. Тестировался инициализация динамической матрицы. Тестировались также такие части программы как:
1.Добавление дуги в матрицу А.
2.Удаление дуги из матрицы А.
3. Добавление вершину в матрицу А.
4. Удаление вершину из матрицы A.
5.Вывод объединения А и B.
6.Вывод дополнения А.
При запуске приложение выводиться меню при соответственном выборе натурального числа, запускается соответствующая операция над графами. Соответственно:
1.Добавить дугу в матрицу А.
2.Удалить дугу из матрицы А.
3.Добавить дугу в матрицу B.
4.Удалить дугу из матрицы B.
5.Добавить вершину в матрицу А.
6.Удалить вершину из матрицы A.
7.Вывод объединения А и B.
8.Вывод дополнения А.
9.Выход…
Все результаты должны были соответствовать законам теории графов.
1. Добавление дуги в матрицу – проверяется методом класса правильность веденных значений вершин между которыми должно установиться смежность. Если значение корректны устанавливается дуга.
2.
Удаление дуги из матрицы –
3.
Добавление вершины–
4.
Удаление вершины –
5.
Объединение двух графов - Матрица
смежности результирующего графа
Результаты
тестирование выбора типа операции и соответственно
выполнения операции над графами показаны
в приложении «В» на рисунке В5-В11.
В результате выполнения курсовой работы была разработана консольная программа, реализующая представление графа в виде матрицы смежности. Также были реализованы следующие операции:
Все поставленные задачи были осуществлены. Навыки, полученные при написании программы, могут быть применены в дальнейшем при написании более сложных программ.
Разумеется, методы
и сферы применения графов не ограничиваются
тем, что представлено в этой работе, так
как были рассмотрены только базовые,
наиболее известные методы.
Рисунок A4 – Алгоритм меню.
Файл MatrixGraph.h
#pragma once
class MatrixGraph
{
int** graph;
int vertexNumber;//число вершин
public:
MatrixGraph(int);
void ShowUnion(MatrixGraph a);
void ComplementGraph(); //дополнение
void addArc(int,int);//добавление дуги
void deleteArc(int,int);
void addNode(int);
void deleteNode(int,bool);
int hasArc(int,int);// проверка дуги
int Size(){return vertexNumber;}
void PrintMatrix();
};
Файл MatrixGraph.cpp
#include "StdAfx.h"
#include "MatrixGraph.h"
MatrixGraph::MatrixGraph(int n)
{
graph=new int*[vertexNumber=n];
for(int i=0;i<n;i++)
{
graph[i]=new int[n];
for(int j=0;j<n;j++)
{
graph[i][j]=
}
}