|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.04.2011, 22:18 | #1 |
Пользователь
Регистрация: 03.04.2011
Сообщений: 19
|
Дийкистра
помогите пожалуйста составить программу которая работает по алгоритму дийскитры
но выводит путь из города с номером А в город с номером Б program izAvB; type T_Matrix=Array[1..100,1..100]of integer; T_Vershiny=Array[1..100] of longint; T_Metki=Array[1.100] of boolean; procedure read_data(var: n,nach,kon:integer; C:T_Matrix); var i,j:integer; F:text; begin assign(f,'gluck.txt'); reset(F); readln(f,n,nach,kon); for i:=1 to n do begin for J:=1 to n do read(f,c[i,j]); readln(f) end; close(f); end; procedure PrintPutj(i:integer; B:T_Vershiny); begin if b[i]=0 then write(i,'-') else begin PrintPutj(B[i],b); write(i,'-'); end end; var c:T_Matrix; D:T_Metki; B,A:T_Vershiny; i,j,min,Punkt,n,s,nach,kon:integer; flag:boolean; begin read_data(n,nach,kon,c); for i:=1 to n do begin A[i]:=false; {DlinaPuti[i]:=1000000;} B[i]:=1000; end; A[nach]:=true; B[nach]:=0; DlinaPuti[nach]:=0; Punkt:=nach; repeat flag:=true; for i:=1 to n do if (not A[i]) and (C[Punkt,i]<>0) and (DlinaPuti[Punkt]+C[Punkt,i]<DlinaPuti[i]) then begin DlinaPuti[i]:=DlinaPuti[Punkt]+C[Punkt,i]; B[i]:=Punkt; end; min:=kon; for i:=1 to n do if (not A[i]) and (DlinaPuti[i]<DlinaPuti[min]) then min:=i; if DlinaPuti[min]<1000000 then begin flag:=false; Punkt:=min; A[punkt]:=true; end; until flag or A[kon]; write(nach, '->',kon,':'); if A[kon] then begin printputj(B[kon],b); write(kon); end else write('*Ґв ЇгвЁ'); readln; end. |