Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2011, 22:18   #1
анна2709
Пользователь
 
Регистрация: 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.
анна2709 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц