Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
алгоритм дейкстра.rtf
Скачиваний:
12
Добавлен:
04.08.2019
Размер:
2.57 Mб
Скачать

4 Диаграммы насси-шнейдермана

Диаграмма Насси — Шнейдермана -это графический способ представления структурированных алгоритмов и программ, разработанный в 1972 году американскими аспирантами Беном Шнейдерманом и Айзеком Насси.

Поскольку в структурном программировании не используется безусловный переход, то Бен Шнейдерман решил, что для записи структурированных алгоритмов не нужны используемые в блок-схемах стрелки. Придумав разные способы изображения основных структур управления (последовательностей, ветвлений и циклов), он затем вместе с Айзеком Насси подробно проработал свою идею. Вместе они написали статью «Техника блок-схем для структурного программирования», которая была опубликована в научном журнале «SIGPLAN Notices» в августе 1973 года.

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

Диаграммы Насси — Шнейдермана имеют ряд преимуществ перед блок-схемами при разработке структурированных алгоритмов и программ:

1 Запись является более компактной (в первую очередь за счёт отсутствия стрелок между элементами).

2 Изобразив алгоритм или программу в виде диаграммы Насси — Шнейдермана, можно быть гарантировано уверенным в том, что принципы структурного программирования соблюдены (при использовании блок-схем можно случайно получить неструктурированный алгоритм, если быть невнимательным).

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

Описание алгоритма Дейкстры в диаграмме Насси-Шнейдермана представлено в приложении Б стр. 25

5 Программная реализация

5.1 Описание структуры программы

Программа выводит минимальный путь между двумя указанными вершинами в графе и его длину.

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

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

Алгоритм использует три массива из N (= числу вершин сети) чисел каждый. Первый массив A содержит метки с двумя значения: 0 (вершина еще не рассмотрена) и 1 (вершина уже рассмотрена); второй массив B содержит расстояния - текущие кратчайшие рас- стояния от до соответствующей вершины; третий массив с содержит номера вершин - k-й элемент С[k] есть номер предпоследней вершины на текущем кратчайшем пути из Vi в Vk. Матрица расстояний D[i,k] задает длины дуге D[i,k]; если такой дуги нет, то D[i,k] присваивается большое число Б, равное "машинной бесконечности".

5.2 Описание использованных программных средств

Таблица 5.2.1–Описание переменных

Переменная

Тип

Описание

n

int

Количество точек (вершин) грифа

i,j

int

Счётчики

k

int

Номер кратчайшего пути и наименьшей длины пути

start

int

Номер начальной точки (вершины)

finish

int

Номер конечной точки (вершины)

A[i]

boolean

Массив, i-й элемент которого имеет значение false, когда i-й путь и расстояние временные, и принимает значение true, когда i-й путь и расстояние становятся постоянными

D[i,j]

int

Массив i-j элемент которого содержит расстояние между i-й и j-й точками (вершинами)

Замечание:

  1. D[i][i]=0

  2. D[i,j]=D[j,i]

C[i]

int

Массив,который содержит номера вершин

path[80][11]

char

Массив строк, который содержит пути

Замечание:

После прохождения обработки по алгоритму Дейкстры p-й элемент массива содержит кратчайший путь.