Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Поиск кратчайшего пути в графе

Тип: реферат
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Разработка алгоритма реализации на ЭВМ процесса поиска кратчайшего пути в графе методом Дейкстры. Программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа. Проверка работоспособности программы на тестовых примерах.
Краткое сожержание материала:

Размещено на

Размещено на

ОГЛАВЛЕНИЕ

  • ЗАДАНИЕ
    • Постановка задачи и сфера ее применения
    • Общие сведения о графах
    • Алгоритм Дейкстры
    • Алгоритм, реализованный в программе
  • ОСОБЕННОСТИ ПРОГРАММНОЙ РЕАЛИЗАЦИИ
  • ПРИМЕР ИСПОЛЬЗОВАНИЯ ПРОГРАММНОЙ РЕАЛИЗАЦИИ
  • ЗАКЛЮЧЕНИЕ
  • ЛИТЕРАТУРА

ЗАДАНИЕ

1. Разработать алгоритм реализации на ЭВМ процесса поиска кратчайшего пути в графе (методом Дейкстры). Предусмотреть проверку допустимости весов дуг графа.

2. Написать и отладить программу, реализующую разработанный алгоритм.

3. Проверить работоспособность программы на тестовых примерах.

Постановка задачи и сфера ее применения

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

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

Кратчайший путь рассматривается при помощи некоторого математического объекта, называемого графом.

Существуют три наиболее эффективных алгоритма нахождения кратчайшего пути:

· алгоритм Дейкстры (используется для нахождения оптимального маршрута между двумя вершинами);

· алгоритм Флойда;

· алгоритм Йена.

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

Программа должна работать так, чтобы пользователь вводил количество вершин и длины рёбер графа, а после обработки этих данных на экран выводился кратчайший путь между двумя заданными вершинами и его длина. Необходимо предусмотреть различные исходы поиска, чтобы программа не выдавала ошибок и работала правильно. Данная программа может использоваться в дискретной математике для исследования графов или в качестве наглядного пособия, демонстрирующего применение алгоритма Дейкстры на практике.

Общие сведения о графах

алгоритм граф путь работоспособность

Граф G (рис.1.1) задается множеством точек (вершин) х1, х2,..., хn. (которое обозначается через Х) и множеством линий (ребер) а1, а2,...,аm. (которое обозначается символом А), соединяющих между собой все или часть этих точек. Таким образом, граф G полностью задается (и обозначается) парой (Х, А). Если ребра из множества А ориентированы, что обычно показывается стрелкой, то они называются дугами, и граф с такими ребрами называется ориентированным графом.

Например, если дорога имеет не двух-, а одностороннее движение то направление этого движения будет показано стрелкой.

Если ребра не имеют ориентации, то граф называется неориентированным, (двухстороннее движение).

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

Путем (или ориентированным маршрутом) ориентированного графа называется последовательность дуг, в которой конечная вершина всякой дуги, отличной от последней, является начальной вершиной следующей.

Так, на рис. 1.2 путями являются последовательности дуг:

а6, а5, а9, а8, а4. (1)

а1, а6, а5, а9. (2)

а1, а6, а5, а9, а10, а6, а4. (3)

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

Простой орцепью называется такой путь, в котором каждая вершина используется не более одного раза. Например, путь (2).

Маршрут есть неориентированный “двойник” пути, и это понятие рассматривается в тех случаях, когда можно пренебречь направленностью дуг в графе. Таким образом, маршрут есть последовательность ребер д1, д2,..., дq, в которой каждое ребро аi, за исключением первого и последнего ребер, связано с ребрами аi-1 и аi+1 своими концевыми вершинами.

В графе, изображенном на рис. 1.2, являются маршрутами; две точки над символом дуги означают, что ее ориентацией пренебрегают, т.е. дуга рассматривается как неориентированное ребро. Также путь или маршрут можно изображать последовательностью вершин. Например, путь (1) будет выглядеть следующем образом: х2, х5, х4, х3, х5, х6. Иногда дугам графа приписываются числа, называемые весом, стоимостью, или длиной этой дуги. В этом случае граф называется графом с взвешенными дугами. А если вес приписывается вершинам графа, то тогда получается граф с взвешенными вершинами. Если в графе веса приписаны и дугам и вершинам, то он называется просто взвешенным. При рассмотрении пути µ представленного последовательностью дуг (д1, д2,..., дq), за его вес принимается число l(µ), равное сумме весов всех дуг, входящих в µ, т.е.

Алгоритм Дейкстры

Алгоритм Дейкстры строит кратчайшие пути, ведущие из исходной вершины графа к остальным вершинам этого графа (если таковые имеются).

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

Сначала помечается исходная вершина; следующей, очевидно, будет помечена вершина, ближайшая к исходной, и смежная с ней.

Пусть на каком-то шаге уже помечено несколько вершин. Известны кратчайшие пути, ведущие из исходной вершины к помеченным. Для каждой из непомеченных вершин проделаем следующее:

1. Рассмотрим все дуги, ведущие из помеченных вершин в одну непомеченную. Каждая такая дуга является последней дугой на пути из исходной вершины в эту непомеченную.

2. Выберем из этих путей кратчайший. А затем выберем среди них самый короткий ко всем непомеченным вершинам, и пометим вершину, к которой он ведет.

Алгоритм завершится, когда будут помечены все достижимые вершины.

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

Алгоритм, реализованный в программе

Задаются:

1. Матрица весов дуг W[i,j], веса дуг между вершинами i и j. Матрица симметричная и положительная. Если i и j не связаны дугой, то W[i,j]=-1

2. Начальная вершина x1

3. Конечная вершина х2

Рабочие данные:

1. Массив distance[i]. В нем будут хранится длины кратчайших путей из x1 в i.

2. Массив path[i]. В нем будет хранится шаг кратчайшего пути между i и х1.

3. front[i]=1, если вершина во фронте волны, 0 иначе

4. newfront[i] массив, где будет готовится новый фронт.

Начало.

1.Заполняется массив distance значениями 10000 (символизирует бесконечность).

2. front[x1]=1; остальные элементы 0

3. Обнуляем все элементы в newfront

Шаг алгоритма.

1. Ищем ненулевые элементы front[i]. Для каждого такого front[i] != 0 делаем шаг 1.1

1.1 Ищем смежные с i вершины, т.е. ищем неотрицательные элементы W[i,j].

Для таких элементов делаем шаги 1.1.1-1.1.2

1.1.1 newdist=distance[i]+W[i,j]

1.1.2 если newdist<distance[j], то делаем шаги 1.1.2.1-1.1.2.3

1.1.2.1 distance[j]=newdist - то есть до j вершины существует путь длины newdist

1.1.2.2 path[j]=i - то есть кратчайший путь в j лежит через вершину i

1.1.2.3 newfront[j]=1 - добавляем j вершину в новый фронт

2. Анализируем newfront.

2.1. Если newfront[x2]=1 (то есть в новом фронте присутствует конечная вершина), то путь найден и переходим к шагу 3

2.2. Если newfront[i]=0 для всех i то пути между x1 и х2 не существует, завершаем алгоритм.

2.3. Иначе для всех i front[i]=newfront[i]; newfront[i]=0; то есть обновляем фронт, и об...

Другие файлы:

Комбинаторные алгоритмы. Поиск кратчайшего пути на графе
Исследование методов решения задачи о ходе коня. Описание алгоритмов для итеративной и рекурсивной программ. Генерация перестановок элементов по индек...

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

Нахождение кратчайшего пути с использованием графов и алгоритма Дейкстры
Графы: определения, примеры, способы изображения. Смежные вершины и рёбра. Путь в ориентированном и взвешенном графе. Матрица смежности и иерархически...

Поиск эйлерова пути в графе
Разработка программы, находящей эйлеров путь в графе с количеством вершин n от 2 до 20. Входные и выходные данные. Алгоритм поиска эйлерова пути с воз...

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