Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая работа - Построение матрицы расстояний в графе

.doc
Скачиваний:
34
Добавлен:
02.05.2014
Размер:
122.37 Кб
Скачать

Уфимский государственный авиационный технический университет

Кафедра АПрИС

Курсовая работа по дискретной математике

«Построение матрицы расстояний в графе,

определение диаметра, радиуса и центров графа»

Выполнила:

студентка гр.САПР-130 Блохина К.

Проверила:

доцент т.н. КМ Шерыхалина Н.М.

Уфа -2007

Содержание

Курсовая работа по дискретной математике 1

«Построение матрицы расстояний в графе, 1

определение диаметра, радиуса и центров графа» 1

Содержание 2

Основные понятия 3

Блок схема 5

6

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

Использованная литература 11

Основные понятия

Понятие графа

Графом называется совокупность двух множеств: множества точек или вершин и множества соединяющих их линий или ребер. Граф задается в виде двух множеств: G=(V, Е), где V={v1v2, ..., vn} — множество вершин графа, а Е={е1, е2, ..., еm} — множество ребер графа. Натуральное число n определяет общее количество вершин конкретного графа, а натуральное число m — общее количество ребер графа. Следует заметить, в общем случае не все вершины графа могут соединяться между собой, что ставит в соответствие каждому графу некоторое бинарное отношение PQ, состоящее из всех пар вида <vi, vj>, где vi, vj = V. При этом пара <vi, vj> и, соответственно, пара <vj, vi> принадлежат отношению PG в том и только в том случае, если вершины vi и vj соединяются в графе G некоторым ребром ek=Е. Вершины графа изображаются точками, а ребра — отрезками прямых линий. Рядом с вершинами и ребрами записываются соответствующие номера или идентификаторы, позволяющие их идентифицировать однозначным образом.

Однако граф отличается от геометрических конфигураций (скажем, фигур, которые также состоят из точек-вершин и линий-сторон) тем, что в графе несущественны различия между точками, форма соединяющих линий и углы между ними. Важно лишь, соединена ли данная пара точек линий или нет. Поэтому граф иногда называют топологическим объектом, т.е. объектом, свойства которого не изменяются при растягивании, сжатии, искривлении ( но без разрывов и склеиваний). По этой же причине (важно лишь наличие или отсутствие соединения) граф- объект дискретный и может быть задан двумя дискретными множествами: множеством точек, которые называются вершинами, и множеством линий, соединяющих некоторые вершины.

Пути и связность в неориентированных графах

Путь в неориентированном графе- это последовательность ребер (vi0, vi1), (vi1, vi2),… (vi n-1, vi n), такая, что любые два соседние ребра совпадает с vi n началом следующего ребра. Вершина vi0 называется началом пути, вершина

vi n –концом пути. Число ребер в пути Р называется длиной и обозначается l(P). Путь называется циклическим, или просто циклом, если любая вершина графа встречается в ней не более чем один раз.

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

Вершины vi и vj называются связанными, если существует путь с началом в vi и концом в vj. В этом случае говорят также, что вершина vj достижима из вершины vi . Каждая вершина по определению связана сама с собой путем нулевой длины.

Связанность- это бинарное отношение на множестве вершин. Оно рефлексивно (каждая вершина по определению связана сама с собой), симметрично (для каждого пути имеется обратный путь) и транзитивно. Транзитивность означает, что если путь из vi в vj и путь из vj в vk, т.е. путь из vi в vk..Т.о., отношение связанности является отношением эквивалентности на множестве вершин графа G, разбивает это множество на непересекающиеся подмножества- классы эквивалентности. Все вершины одного класса связаны между собой, вершины из разных классов между собой не связаны. Подграф, образованный всеми вершинами одного класса, называется компонентой связности графа G

Неориентированный граф называется связным, если все его вершины связаны между собой. Максимальный связный подграф графа G называется компонентой связности графа G. Связный граф состоит из одной компоненты связности.

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

Расстояния. Диаметр, радиус, центр.

Минимальная из длин простых цепей, связывающих вершины vi и vj неориентированного графа, называется расстоянием между этими вершинами и обозначается d(vi, vj ).

Поскольку по определению каждая вершина связана сама с собой, то d(vi, vj )=0

Диаметром d(G) графа G называется максимальное из расстояний между его вершинами: d(G)=max d(vi, vj ).

vi, vj€G

Максимальным удалением вершины vi называется величина

r(vi )=max d(vi, vj ).

vj€G

Вершина v называется центром графа G, если r(v) минимальное среди других вершин графа:

r(vi )=min d(vi, vj ).

vj€G

Максимальное удаление r(v) от цнтра v называется радиусом графа G и обозначается r(G).

Блок схема

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

#include <stdio.h>

#include<stdlib.h>

#include<dir.h>

#include<string.h>

#include<fstream.h>

#include<conio.h>

#include<fstream.h>

#include <conio.h>

void main(){

int i,j,n;

int a[5][5];

int b[5][5];

clrscr();

ifstream inp_file("input.txt");

if (!inp_file)

{ printf("Error!!! File not found! Press any key to exit");

getch();

exit(1);

}

if (inp_file)

{

inp_file>>n;

for (int i=0;i<n;i++)

for (int j=0;j<n;j++)

inp_file>>a[i][j];

}

inp_file.close();

printf("Ishodnaya matrica \n\n");

for (i=0;i<5;i++)

{

printf("\n");

for (j=0;j<5;j++)

{

b[i][j]=a[i][j];

printf("%3i",a[i][j]);

}

}

int flag;

while (flag)

{

flag=0;

for (i=0;i<5;i++)

for (j=0;j<5;j++)

if((i!=j)&&a[i][j])

for(int k=0;k<5;k++)

if(k!=i&&k!=j&&a[j][k]&&(a[i][k]==0||a[i][k]>a[i][j]+a[j][k]))

{

a[i][k]=a[i][j]+a[j][k];

flag=1;

}

}

int max=0;

int r[5];

for (i=0;i<5;i++) r[i]=0;

for (i=0;i<5;i++)

for (j=0;j<5;j++)

if (a[i][j]>max) max=a[i][j];

printf("\n\nDiametr raven %i;\n",max);

for (i=0;i<5;i++)

for (j=0;j<5;j++)

if (a[i][j]>r[i]) r[i]=a[i][j];

for (i=0;i<5;i++) printf("\nExcentrisitet ь%i is %i;",i+1,r[i]);

int min=9999;

for (i=0;i<5;i++)

if (min>r[i]) min=r[i];

printf("\n\nRadius raven %i;\n",min);

printf("\n\nCentralnaye vershini:\n");

for (i=0;i<5;i++)

if (r[i]==min) printf("%i \n",i,r[i]);

getch();

}

Тестирование программы

Вывод

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

Использованная литература

1. Житникова Н.М. Практикум по курсу дискретной математики «Теория графов»

2. Кузнецов О.П. Дискретная математика для инженер

3. Васильев К.Н. Основы теории графов