|
#1
|
|||
|
|||
Волновой алгоритм
Мне нужно оформить программу по нахождению кратчайшего пути
Код у меня почти есть,единственное,что я никак не могу понять,так это как работать с направлениями.Мне подсказали,что надо сделать так Код:
type TDirection=(drLeft,drRight,drUp,drDown,drRightUp,drRightDown,drLeftUp,drLeftDown); и записывать при каждом шаге в массив этот параметр,но я не понимаю,как программа поймет какой параметр записывать. Хелп. Код программы Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids,Math; type TDirection=(drLeft,drRight,drUp,drDown,drRightUp,drRightDown,drLeftUp,drLeftDown); {TDirs=record drLeft,drRight,drUp,drDown,drRightUp,drRightDown,drLeftUp,drLeftDown:(i,j); end; } TForm1 = class(TForm) StringGrid1: TStringGrid; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Label15: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); const n=7; m=6; d=1; lock=50; //заблокированные клетки type ArrDir=array of TDirection; Matrix=array[1..n,1..m] of integer; var A:Matrix; k,i,j,Rand1,Rand2:integer; begin FillChar(A,SizeOf(A),0); for i:=1 to High(a) do for j:=1 to High(a) do StringGrid1.Cells[i,j]:=IntToStr(a[i,j]); for k:=1 to 3 do begin Rand1:=RandomRange(1,8); //определяю рандомные запрещенные клетки Rand2:=RandomRange(1,7); StringGrid1.Cells[Rand1,Rand2]:=IntToStr(lock); end; StringGrid1.Cells[1,6]:=IntToStr(d); //помечаю стартовую ячейку { for i:=StringGrid1.Cells[i-1,j-1] to StringGrid1.Cells[i+1,j+1] do if StringGrid1.Cells[i,j]=d then continue; } end; end. |