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

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

При запуске программы на экране появится окно с инструкциями. Выполняйте эти инструкции, а именно:

  1. Введите номер начальной вершины.

  2. Введите номер конечной вершины. На экран выводится матрица смежности, прочтенная из текстового файла

  3. Чтоб завершить работу программы после получения результата нажмите Enter.

Заключение

Таким образом, в процессе создания данного проекта разработана программа, реализующая алгоритм Дейкстры в Turbo Pascal. Её недостатком является примитивный пользовательский интерфейс. Это связано с тем, что программа работает в консольном режиме, не добавляющем к сложности языка сложность программного оконного интерфейса

Также были углублены знания, полученные в процессе выполнения лабораторных работ по предмету «Программирование».

Литература

1. Е. А. Зуев. Программирование на языке Turbo Pascal 6.0, 7.0, М.:Веста,Радио и связь, 1993, — С.376

2. Кассера В. Ф. Turbo Pascal 7.0, Диасофт, 2003

3. Эллиот Б. Коффман. Turbo Pascal = Turbo Pascal Web Update — М.: Вильямс, 2005. — С. 896.

4.Моргун Александр Николаевич. Справочник по Turbo Pascal для студентов — М.: Диалектика, 2006. — С. 608

5. Нэйл Рубенкинг. Turbo Pascal для Windows = Turbo Pascal for Windows. Techniques and Utilites — М.: Мир, 1993. — С. 535.

6. Фаронов В. В. Turbo Pascal. Наиболее полное руководство. BHV-Санкт-Петербург, 2007

Приложение а

Текст программы

Program Alg_dejkstr;

Uses Crt;

Const MaxSize=8;

n=8;

Infinity=1000;

Var D: array [1..MaxSize, 1..MaxSize] of integer;

A: array [1..MaxSize] of boolean;

B,C: array [1..MaxSize] of integer;

Start, Finish, k, i: integer;

Procedure Init;

Var f: text;

i, j: integer;

Begin

Assign(f, 'INPUT.MTR');

Reset(f);

For i:=1 to n do

Begin

For j:=1 to n do

Read(f, D[i,j])

End;

For i:=1 to n do

begin

For j:=1 to n do

write(d[i,j]);

writeln

end;

Write('начальная вершина: '); Readln(Start);

For i:=1 to n do

Begin

A[i]:=False;

B[i]:=D[Start, i];

C[i]:=Start

End;

C[Start]:=0;

A[Start]:=True

End;

Function Possible: Boolean;

Var i: integer;

Begin

Possible:=True;

For i:=1 to n do If not A[i] then Exit;

Possible:=False

End;

Function Min: Integer;

Var i, minvalue, currentmin: integer;

Begin

Minvalue:=Infinity;

For i:=1 to n do

If not A[i] then

If B[i]<minvalue then

Begin

currentmin:=i;

minvalue:=B[i]

End;

min:=currentmin

End;

Begin

ClrScr;

Init;

While Possible do

Begin

k:=min;

A[k]:=True;

For i:=1 to n do

If B[i]>B[k]+D[i, k] then

Begin

B[i]:=B[k]+D[i, k];

C[i]:=k

End

End;

Write('конечная вершина: '); Readln(Finish);

Write(Finish);

Finish:=C[Finish];

While Finish<>0 do

Begin

Write('<-', Finish);

Finish:=C[Finish];

End;

ReadKey

End.

Массив расстояний, прочитанный из текстового файла имеет вид:

0 23 12 1000 1000 1000 1000 1000

23 0 25 1000 22 1000 1000 35

12 25 0 18 1000 1000 1000 1000

1000 1000 18 0 1000 20 1000 1000

1000 22 1000 1000 0 23 14 1000

1000 1000 1000 20 2 3 0 24 1000

1000 1000 1000 1000 14 24 0 16

1000 35 1000 1000 1000 1000 16 0