Помощь - Поиск - Пользователи - Календарь
Полная версия: Алгоритм Дейкстры
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Single
Доброго времени суток уважаемые эксперты, у меня возникла проблема с программой на алгоритм Дейкстры. При изменении стоимости путей, путь всё равно не меняется, не знаю как это исправить. Помогите пожалуйста.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, Menus, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Memo2: TMemo;
OpenDialog1: TOpenDialog;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
SaveDialog1: TSaveDialog;
Label1: TLabel;
Label2: TLabel;
Bevel1: TBevel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure Button2Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.N2Click(Sender: TObject);
begin
if OpenDialog1.Execute then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm1.N3Click(Sender: TObject);
begin
if SaveDialog1.Execute then
Memo1.Lines.SaveToFile(SaveDialog1.FIleName);
end;
procedure TForm1.Button1Click(Sender: TObject);

var i,j,min:integer;
dlinna: array [0..24] of integer;
d: array [1..12] of integer;
nachalo: array [0..24] of integer;
konec: array [0..24] of integer;
r: array [0..24] of string[8];
k: integer;
put:string[20];
s: string[2];
///////////////////
begin
Memo2.Clear;
put:='';
d[1]:=0;
for i:=2 to 12 do
d[i]:=10000;
for i:=0 to 24 do
r[i]:=memo1.Lines[i];
///////////////////
///////////////////начало
for i:=0 to 24 do
for j:=1 to 8 do
begin
if r[i][j]=',' then begin
if j=3 then begin s:=r[i][1]; s:=s+r[i][2]; nachalo[i]:=strtoint(s); end;
if j=2 then nachalo[i]:=strtoint(r[i][1]);
end;
s:='';
end;
///////////////////конец
for i:=0 to 24 do
for j:=1 to 8 do
begin
if r[i][j]='=' then begin
if j=5 then begin s:=r[i][3]; s:=s+r[i][4]; konec[i]:=strtoint(s); end;
if j=4 then konec[i]:=strtoint(r[i][3]);
if j=6 then begin s:=r[i][4]; s:=s+r[i][5]; konec[i]:=strtoint(s); end;
end;
s:='';
end;
for i:=0 to 24 do
for j:=1 to 8 do
begin
if r[i][j]='=' then
begin
if r[i][j+2]<>';' then s:=r[i][j+1]+r[i][j+2] else s:=r[i][j+1];
dlinna[i]:=strtoint(s);
end;
s:='';
end;
k:=1;
put:='1';
repeat
min:=10000;
for i:=0 to 24 do
if nachalo[i]=k then
begin
d[konec[i]]:=d[k]+dlinna[i];
if d[konec[i]]<min then
begin
min:=d[konec[i]];
k:=konec[i];
end;
end;
put:=put+' '+inttostr(k);
until k=12;
memo2.lines.Add(put);
label1.Caption := 'Минимальная стоимость: ' + FloatToStr(min);
end;
procedure TForm1.N5Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N7Click(Sender: TObject);
Var ExB: WORD;
begin
ExB:=MessageBox(handle,pchar('Программу выполнил студент, Николаенко Антон Юрьевич, группы КТм-701'),
pchar('Алгоритм Дейкстры'),0);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Clear;
end;

end.



Программа с файлом задания в приложении Нажмите для просмотра прикрепленного файла
dron4ik
Привет! Скачай лучше рабочий алгоритм http://sources.codenet.ru/?cid=12
volvo
Во-первых, это на С/С++, а во-вторых, чего ж ты сам-то рабочий алгоритм не скачиваешь? Иди, качай, коли такой умный, очередь свою кольцевую... Или другим советовать - просто?
dron4ik
volvo суть форума и заключается в помощи человеку чем либо..я думаю не лишнее будет ему перейти по ссылке и посмотреть.


Во-первых, это на С/С++, а во-вторых, чего ж ты сам-то рабочий алгоритм не скачиваешь? Иди, качай, коли такой умный, очередь свою кольцевую... Или другим советовать - просто?-----вот этим вы ему явно ни чем не помогли......
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.