Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичні вказівки з курсової роботи AтаПЗОВПвТ....doc
Скачиваний:
7
Добавлен:
05.12.2018
Размер:
7.49 Mб
Скачать

Текст процедури на мові Pascal, яка реалізує алгоритм Дейкстри

Program Dijkstra;

Uses Crt;

Label 1,2,3;

Var

n,i,j,m,a_0,a_n,sum,k,min,ind,w,v_:Integer;

S, D, P, V : Array[1..10]of Integer;

C : Array[1..10,1..10]of Integer;

SIM : Array[1..10,1..20] Of Char;

prom : Char;

symbol : String;

cifra : Integer;

Function v_s (ind : Integer):Boolean;

Var i : Integer;

Begin

v_s := false;

For i:=1 To n Do

If (s[i] = ind) Then

v_s := true;

End;

Begin

ClrScr;

Write('Введите количество a/п : ');

Readln (n);

Write('Введите количество авиалиний : ');

Readln(m);

Writeln('');

Write('V={');

For i:=1 To n Do

Begin

V[i] := i;

If (i<>n) Then

Write(V[i],',')

Else

Write(V[i],'}');

End;

sum := 0;

C[1,2] := 10; C[1,4] := 30; C[1,5] := 100;

C[2,3] := 50;

C[3,1] := 70; C[3,5] := 10;

C[4,3] := 20;

C[5,4] := 60;

Writeln('');

For i:=1 To n Do

For j:=1 To n Do

Begin

Write('Введите номер а\п отправления : ');

Readln(a_0);

Write(''Введите номер а\п назначения : ');

Readln(a_n);

Write('Введите время полёта по авиалинии : ');

Readln(C[a_0,a_n]);}

If (C[i,j] <> 0) Then

sum := sum + C[i,j];

writeln;

End;

For i:=1 To n Do

Begin

If (Round(n/2)=i) Then

Write ('C=')

Else

Write(' ');

For j:=1 To n Do

Begin

If (C[i,j] = 0) Then

Begin

C[i,j] := sum;

Write(' ~',' ');

End

Else

Write(C[i,j],' ');

End;

Writeln(' ');

End;

S[1] := 1;

For i:=1 To n Do

V[i] := V[i+1];

For i:=2 To n Do

Begin

P[i] := 1;

D[i]:=C[1,i];

End;

For k:=1 To (n-1) Do

Begin

min := sum;

For i:=2 To n Do

If ((D[i] <= min) And (Not(v_s(i)))) Then

Begin

min := D[i];

w := i;

End;

For i:=1 To n Do

If (S[i] = 0) Then

Begin

S[i] := w;

Goto 1;

End;

1: For i:=1 To n Do

If (V[i] = w) Then

Begin

For j:=i To n Do

V[j] := V[j+1];

Goto 2;

End;

2: i := 1;

v_ := V[i];

While (v_ <> 0) Do

Begin

If (D[v_] > (D[w] + C[w, v_])) Then

Begin

D[v_] := D[w] + C[w, v_];

P[v_] := w;

End;

i :=i + 1;

v_ := V[i];

End;

End;

writeln;

Write ('D={');

For i:=2 To n Do

If (I <> n) Then

Write(D[i],',')

Else

Write (D[i],'}');

writeln;

Write('P={');

For i:=2 To n Do

If (i <> n) Then

Write (P[i],',')

Else

Write (P[i],'}');

For i:=2 To n Do

Begin

j := 1;

Str(i, simbol);

SIM[i,j] := simbol[1];

3:If (j = 1) Then

Begin

Str(P[i],simbol);

prom := simbol[1];

End

Else

Begin

Val(prom, cifra, cifra);

Str(P[cifra],simbol);

prom := simbol[1];

End;

j := j + 1;

SIM[i,j] := '>';

j := j + 1;

SIM[i,j] := '-';

j := j + 1;

SIM[i,j] := prom;

If (prom <> '1') Then

Goto 3;

End;

Writeln(' ');

For i:=2 to n Do

Begin

Writeln('');

For j:=20 downto 1 Do

Write(SIM[i,j]);

Write(' = ',D[i]);

End;

readln;

End. {Dijkstra}

Додаток 18