Помощь в написании студенческих работ
Антистрессовый сервис

Поиск оптимального пути в ненагруженном орграфе

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Маршруты и пути Последовательность v1x1v2x2v3… xkvk+1, (где kі1, viОV, i=1,…, k+1, xiОX, j=1,…, k), в которой чередуются вершины и ребра (дуги) и для каждого j=1,…, k ребро (дуга) xj имеет вид {vj, vj+1} (для ориентированного графа (vj, vj+1)), называется маршрутом, соединяющим вершины v1 и vk+1 (путем из v1 в vk+1). Чтобы найти расстояния в ориентированном графе, необходимо составить матрицу… Читать ещё >

Поиск оптимального пути в ненагруженном орграфе (реферат, курсовая, диплом, контрольная)

1. Введение

2. Теоретическая часть а) Основные понятия теории графов б) Понятия смежности, инцидентности, степени

в) Маршруты и пути г) Матрицы смежности и инцедентности

3. Алгоритм поиска минимального пути из в в ориентированном орграфе (алгоритм фронта волны)

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

5. Примеры выполнения программы

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

Введение

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

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

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

Нахождение кратчайшего пути — жизненно необходимо и используется практически везде, начиная от нахождения оптимального маршрута между двумя объектами на местности (напр. кратчайший путь от дома до академии), также используется в системах автопилота, используется для нахождения оптимального маршрута при перевозках коммутации информационного пакета Internet и мн. др.

Кратчайший путь рассматривается при помощи графов.

Цель курсовой работы:

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

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

а) Основные понятия теории графов Теория графов как теоретическая дисциплина может рассматриваться как раздел дискретной математики, исследующий свойства конечных множеств с заданными отношениями между их элементами. Как прикладная дисциплина теория графов позволяет описывать и исследовать многие физические, технические, экономические, биологические, социальные и другие системы. Например, графом, изображенным на рис. 1, в котором точки? вершины графа? города, линии, соединяющие вершины? ребра? дороги, соединяющие города, описывается так называемая транспортная задача (задача нахождения кратчайшего пути из одного городапункта в другой).

Рис. 1.

Формальное определение графа таково. Пусть задано конечное множество V, состоящее из n элементов, называемых вершинами графа, и подмножество X декартова произведения VЧV, то есть, называемое множеством дуг, тогда ориентированным графом D называется совокупность (V, X). Неориентированным графом G называется совокупность множества V и множества ребер? неупорядоченных пар элементов, каждый из которых принадлежит множеству V.

Одинаковые пары — параллельные или кратные ребра;

Кратностью ребер называют количество одинаковых пар.

Рис. 2.

Например, кратность ребра {v1,v2} в графе, изображенном на рис. 2, равна двум, кратность ребра {v3,v4}? трем.

Псевдограф? граф, в котором есть петли и/или кратные ребра.

Мультиграф? псевдограф без петель.

Граф? мультиграф, в котором ни одна пара не встречается более одного раза.

Граф называется ориентированным, если пары (v, w) являются упорядоченными.

Ребра ориентированного графа называются дугами.

Итак, используемые далее обозначения:

V — множество вершин;

X — множество ребер или дуг;

v (или vi) — вершина или номер вершины;

G, G0 — неориентированный граф;

D, D0 — ориентированный;

{v, w}? ребра неориентированного графа;

{v, v} - обозначение петли;

(v, w)? дуги в ориентированном графе;

v, w — вершины, x, y, z — дуги и ребра;

n (G), n (D) количество вершин графа;

m (G) — количество ребер, m (D) — количество дуг.

Примеры

1) Ориентированный граф D=(V, X), V={v1, v2, v3, v4},

X={x1=(v1,v2), x2=(v1,v2), x3=(v2,v2), x4=(v2,v3)}.

Рис. 3.

2) Неориентированный граф G=(V, X), V={v1, v2, v3, v4, v5},

X={x1={v1,v2}, x2={v2,v3}, x3={v2,v4}, x4={v3,v4}}.

Рис. 4.

б) Понятия смежности, инцидентности, степени Если x={v, w} - ребро, то v и w? концы ребер.

Если x=(v, w) — дуга ориентированного графа, то v? начало, w — конец дуги.

Вершина v и ребро x неориентированного графа (дуга x ориентированного графа) называются инцидентными, если v является концом ребра x (началом или концом дуги x).

Вершины v, w называются смежными, если {v, w}ОX.

Степенью вершины v графа G называется число d (v) ребер графа G, инцидентных вершине v.

Вершина графа, имеющая степень 0 называется изолированной, а степень 1 — висячей.

Полустепенью исхода (захода) вершины v ориентированного графа D называется число d+(v) (d-(v)) дуг ориентированного графа D, исходящих из v (заходящих в v).

Следует заметить, что в случае ориентированного псевдографа вклад каждой петли инцидентной вершине v равен 1 как в d+(v), так и в d-(v).

в) Маршруты и пути Последовательность v1x1v2x2v3… xkvk+1, (где kі1, viОV, i=1,…, k+1, xiОX, j=1,…, k), в которой чередуются вершины и ребра (дуги) и для каждого j=1,…, k ребро (дуга) xj имеет вид {vj, vj+1} (для ориентированного графа (vj, vj+1)), называется маршрутом, соединяющим вершины v1 и vk+1 (путем из v1 в vk+1).

Длина маршрута (пути)? число ребер в маршруте (дуг в пути).

г) Матрицы смежности и инцидентности Пусть D=(V, X) ориентированный граф, V={v1,…, vn}, X={x1,…, xm}.

Матрица смежности ориентированного графа D? квадратная матрица

A (D)=[aij] порядка n, где Матрица инцидентности? матрица B (D)=[bij] порядка nґm, где

Матрицей смежности неориентированного графа G=(V, X) называется квадратная симметричная матрица A (G)=[aij] порядка n, где

.

Матрица инцидентности графа G называется матрица B (G)=[bij] порядка nґm, где Алгоритм поиска минимального пути из в в ориентированном орграфе (алгоритм фронта волны)

1) Помечаем вершину индексом 0, затем помечаем вершины О образу вершины индексом 1. Обозначаем их FW1 (v). Полагаем k=1.

2) Если или k=n-1, и одновременно то вершина не достижима из. Работа алгоритма заканчивается.

В противном случае продолжаем:

3) Если, то переходим к шагу 4.

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

4) Помечаем индексом k+1 все непомеченные вершины, которые принадлежат образу множества вершин c индексом k. Множество вершин с индексом k+1 обозначаем. Присваиваем k:=k+1 и переходим к 2).

Замечания Множество называется фронтом волны kго уровня.

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

Чтобы найти расстояния в ориентированном графе, необходимо составить матрицу минимальных расстояний R (D)между его вершинами. Это квадратная матрица размерности, элементы главной диагонали которой равны нулю (, i=1,., n).

Сначала составляем матрицу смежности. Затем переносим единицы из матрицы смежности в матрицу минимальных расстояний (, если). Далее построчно заполняем матрицу следующим образом.

Рассматриваем первую строку, в которой есть единицы. Пусть это строка? i-тая и на пересечении с j-тым столбцом стоит единица (то есть). Это значит, что из вершины можно попасть в вершину за один шаг. Рассматриваем j-тую сроку (строку стоит вводить в рассмотрение, если она содержит хотя бы одну единицу). Пусть элемент. Тогда из вершины в вершину можно попасть за два шага. Таким образом, можно записать. Следует заметить, что если в рассматриваемых строках две или более единиц, то следует прорабатывать все возможные варианты попадания из одной вершины в другую, записывая в матрицу длину наикратчайшего из них.

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

#include

#include

using namespace std;

int main ()

{

int N=0,n=0,c=0,i=0,k=0;

cout<<" ———————————————————————" <

cout<<" |Poisk optimalnogo puti v nenagrujennom orgrafe|" <

cout<<" ———————————————————————" <

case1:

cout<<" Vvedite chislo vershin v orgrafe: «;

cin>>N;

if (N<=1)

{

cout<<" Kolichestvo vershin doljno bit'>1!!!" <

goto case1;

}

///МАТРИЦА смежности:

cout<<" Zapolnite matricu smejnosti (esli puti net, vvedite 0; esli put' est', vvedite 1):" ;

float** A = new float*[N];

for (i;i

A[i] = new float[N];

for (i=0;i

for (int k=0;k

{

cout<<" V" ;

printf («%d», i+1);

cout<<" ->V" ;

printf («%d», k+1);

cout<<'=';

scanf («%f», &A[i][k]);

if ((A[i][k]≠0)&&(A[i][k]≠1))

{

cout<<" Vvodite tol’ko 0 ili 1!" <

return 0;

}

if ((i==k)&(A[i][k]==1))

{

cout<<" Na glavnoi diagonali doljni bit' nuli!" <

return 0;

}

}

////Откуда и куда?(Начальная и конечная вершина в графе!!)

case2:

cout<<" Vvedite nachalnuiu vershinu: «;

cin>>n;

if (n>N)

{

cout<<" Net takoi vershini!" <

goto case2;

}

if (n==0)

{

cout<<" Net takoi vershini!" <

goto case2;

}

case3:

cout<<" Vvedite konechnuyu vershinu: «;

cin>>c;

if (c>N)

{

cout<<" Net takoi vershini!" <

goto case3;

}

if (c==0)

{

cout<<" Net takoi vershini!" <

goto case3;

}

///Массив, где записывается число шагов

int h=1;

float*B= new float[N];

for (i=0;i

{

B[i]=0;

}

//В массиве B[N-1] ищем вершины, которые достжимы из начала пути

//т.е за один шаг

for (k=0;k

{

if (A[n-1][k]==1)

B[k]=1;

}

//Элементы фронта волны

while (h<50)

{

for (i=0;i

{

for (k=0;k

{

if ((B[i]==h)&&(A[i][k]==1)&&(B[k]==0))

B[k]=h+1;

}

}

h++;

}

B[n-1]=0;

if (B[c-1]≠0)

{

///Вывод на экран таблицу

cout<<" nTablica stoimosti minimalnogo puti:" <

for (i=0;i

{

printf («%f «, B[i]);

}

//Поиск обратного пути

cout<<" nnOptimal’nii put'(v obratnom poryadke):n" <<" V" ;

printf («%d», c);

h=c-1;

int b=B[c-1];

while (b>0)

{

for (i=0;i

if ((A[i][h]==1)&&(B[i]==B[h]-1))

{

cout<<" V" ;

printf («%d», i+1);

h=i;

b—;

}

}

cout<<" n" ;

}

else

{

cout<<" nPuti net! n" ;

}

delete A, B;return 0;

}

Примеры выполнения программы:

1.

2.

3.

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

1. «Теория графов». Методические указания по подготовке к контрольным работам по дисциплине «Дискретная математика». Сост.: Н. И. Житникова, Г. И. Федорова, А. К. Галимов. — Уфа, 2005 -37 с.

2. Курс лекций по дискретной математике Житникова В.П.

3. «Самоучитель С++», Перевод с англ. -3 изд. — СПб.: БХВ-Петербург, 2005 — 688 с.

4. «Дискретная математика для программистов», Ф. А. Новиков.

5. «Введение в дискретную математику», Яблонский.

6. «Курс дискретной математики», Неферов, Осипова.

7. «Информатика» Л. З. Шауцукова.

Показать весь текст
Заполнить форму текущей работой