Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теплов_КР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
182.27 Кб
Скачать

3.2. Структура программы

Структура программы показана на рисунке

main- главная

программа

3

1

calc_distances- вычисление расстояний от заданной вершины до остальных вершин графа

2

input_graph- ввод графа

trans_graph-преобразование графа

4

5

get_edges_count-подсчет количества ребер

output_message - вывод сообщений

Рис.2.2. Модульная структура программы

Программа состоит из шести функционально-прочных модулей: main - главная программа, input_graph - ввод графа, trans_graph – преобразование графа, get_edges_count – подсчет количества ребер, output_message - вывод сообщений, calc_distances – вычисление расстояний от заданной вершины до остальных вершин графа.

Сопряжения модулей программы описаны в табл. 3.1. Все данные между модулями передаются только в виде параметров, глобальных переменных в программе нет.

Таблица 3.1 Сопряжение модулей.

N

Вход

Выход

1

Количество вершин начального графа, матрица смежности начального графа, код завершения

2

Количество вершин начального графа, матрица смежности начального графа

Количество вершин конечного графа, матрица смежности конечного графа

3

Количество, матрица смежности, номер вершины

Расстояния до вершины

4

Количество вершин, матрица смежности

Количество ребер

5

Номер сообщения

-

3.3. Описание модулей

3.3.1. Main - главный модуль

ОБРАЩЕНИЕ ИЗ MS DOS: Kurs

ЗАГОЛОВОК: void main ()

ФУНКЦИЯ: Ввод графа из стандартного входного файла stdin, поиск в нем заданного пути от заданной вершины, вывод результата и сообщений об ошибках в стандартный выходной файл stdout.

ВХОДНЫЕ ДАННЫЕ: Нет.

ВЫХОДНЫЕ ДАННЫЕ: Нет.

ЗНАЧЕНИЕ: Нет.

РАБОЧИЕ ДАННЫЕ:

gr_vertex_count – количество вершин в начальном графе;

gr_adj_matrix – матрица смежности начального графа;

gr1_vertex_count – количество вершин в конечном графе;

gr1_adj_matrix – матрица смежности конечного графа;

i,j – номера вершины;

kz – код завершения подпрограммы;

dest_vertex – заданная вершина.

АЛГОРИТМ: см. алгоритм 3.1.

Алгоритм 3.1. Алгоритм модуля main

kz = input_graph (&gr_vertex_count, &gr_adj_matrix); /* ввод графа */

if (kz != 0)

{

goto exit

}

Преобразование графа;

Ввод номер вершины;

Вычисление расстояний до введенной вершины;

Вывод вершин, расстояние до которых равно 2;

3.3.2. Calc_distances – вычисление расстояний до заданной вершины

ЗАГОЛОВОК:

void calc_distances(int vertex_count, int* adj_matrix, int** distances, int dest_vertex)

ФУНКЦИЯ: Вычисление расстояний.

ВХОДНЫЕ ДАННЫЕ:

vertex_count - количество вершин;

adj_matrix - матрицa смежности графа.

dest_vertex – номер заданной вершины.

ВЫХОДНЫЕ ДАННЫЕ:

distances – расстояния

ЗНАЧЕНИЕ: Нет

РАБОЧИЕ ДАННЫЕ:

i,j – номера вершин;

flag – признак завершения.

АЛГОРИТМ: см. алгоритм 3.2.

Алгоритм 3.2. Вычисление расстояний от заданной вершины до остальных вершин графа

Устанавливаем все расстояния равными -1;

distances[dest_vertex]=0;

flag=1;

while (flag)

{

flag=0;

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

{

if (distances[i]>=0)

{

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

{

if ((вершины i и j смежны) &&

(расстояние до j равно -1 или больше (расстояние до i)+1))

{

flag = 1;

distances[j] = distances[i]+1;

}

}

}