Tài liệu Giáo trình toán rời rạc - Phụ lục 1 - Pdf 86

PHẦN PHỤ LỤC
Phụ lục 1
Unit chứa khai báo các cấu trúc dữ liệu cho đồ thị
và cài đặt thủ tục tìm đường đi ngắn nhất theo thuật toán
unit Func_DoThi;
interface
type
TypeToaDo=record
x,y:integer;
end;
TypeChiPhi=record
VoCung:boolean;//Neu VoCung=True thi co nghia la chi phi bang Vo Cung,
nguoc lai thi chi phi bang Gia
Gia:real;
end;
TypeDinh=record
Ten:String;
ToaDo:TypeToaDo;
MucKichHoat:Byte;
end;
TypeDanhSachDinh=array of TypeDinh;
TypeCanh=record
DinhDau,DinhCuoi:Integer;//Tham chieu trong danh sach Dinh
TrongSo:TypeChiphi;
end;
TypeDanhSachCanh=Array of TypeCanh;
TypeDoThi=Record
SoDinh:Integer;
DSDinh:TypeDanhSachDinh;
SoCanh:Integer;
DSCanh:TypeDanhSachCanh;

for i:=0 to M-1 do
begin S[i]:=0;Dist[i]:=Cost[X,i];MocXich[i]:=X;end;
S[X]:=1;Dist[X].VoCung:=False;Dist[X].Gia:=0;K:=2; {Dua X vao S}
while k<M do {Xac dinh M-1 duong di}
begin
u:=0;
While S[u]<>0 do u:=u+1;
Min:=Dist[u];i:=u+1;
While i<M do
begin
If S[i]=0 then
If ((Min.VoCung)and(not Dist[i].VoCung))or
((Not min.VoCung)and((not Dist[i].VoCung)and(min.Gia>Dist[i].Gia))) then
begin Min:=Dist[i];u:=i;end;
i:=i+1;
end;
S[u]:=1;k:=k+1;{Dua u vao tap S}
For w:=0 to M-1 do
if S[w]=0 then
begin
If (not Dist[u].VoCung)and(not Cost[u,w].VoCung)and
((Dist[w].VoCung)or(Dist[w].Gia>(Dist[u].Gia+Cost[u,w].Gia)))
then
136
begin
Dist[w].VoCung:=false;
Dist[w].Gia:=Dist[u].Gia+Cost[u,w].Gia;
MocXich[w]:=u;{Duong di ngan nhat den W thi phai di qua U}
end;
end;

end;
Procedure DeleteGraph(VAR G:TypeDoThi);
begin
G.SoDinh:=0;
G.SoCanh:=0;
Setlength(G.DSDinh,0);
Setlength(G.DSCanh,0);
end;
BEGIN
G.SoDinh :=0;G.SoCanh:=0;
END.
137
Thiết kế giao diện cho chương trình (Form 2)
Với các đối tượng được gồm:
Các khai báo và cài đặt cho chương form2:
unit Unit2;
138
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, Buttons, ExtCtrls,Func_Dothi,Func_Graph, Menus,IdGlobal,
ImgList,Jpeg;
const BanKinh=20;
RMuiTen=10;
type
TForm2 = class(TForm)
Panel1: TPanel;
MaskEdit1: TMaskEdit;
MaskEdit2: TMaskEdit;
StaticText1: TStaticText;

N4: TMenuItem;
procedure PaintBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
139
procedure PaintBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
Procedure DrawPaint(PaintBox:TPaintBox;Bitmap:TBitmap);
procedure FormResize(Sender: TObject);
procedure FormCreate(Sender: TObject);
function DownDinh(x,y:integer;G:TypeDothi):integer;
procedure PaintBox1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure PaintBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure HienThamSoCung(G:TypeDoThi);
procedure MaskEdit1Change(Sender: TObject);
procedure MaskEdit2Change(Sender: TObject);
procedure PaintBox1Paint(Sender: TObject);
procedure imduongdingannhat2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormDestroy(Sender: TObject);
procedure Rename1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure Delete1Click(Sender: TObject);
procedure DeleteAll1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
procedure Open1Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);

MidPoint.y:=T1.y +Round(Dy*PhanTram/100);
end;
Procedure
Veline(T1,T2:TypeToaDo;Gia:real;Pic:Tbitmap;LineColor:Tcolor;TimeDelay:TdateTi
me);
var i:integer;T3:TypeToaDo;TimeNow:TDateTime;
TempPic:Tbitmap;
begin
TempPic:=Tbitmap.Create;
For i:=1 to 100 do
begin
TempPic.Assign(Pic);
TimeNow:=Time;
T3:=MidPoint(T1,T2,i);
Vecung(TempPic,T1,T3,Gia,True,RGB(255,0,0),RGB(0,0,255));
Form2.DrawPaint(Form2.PaintBox1,TempPic);
repeat
Application.ProcessMessages;
until (TimeNow+TimeDelay)>Time;
end;
TempPic.Free;
end;
Procedure TForm2.DrawPaint(PaintBox:TPaintBox;Bitmap:TBitmap);
begin
Paintbox.Canvas.Draw(0,0,Bitmap);
end;
procedure CatZeroThua(var St:string);
var i,P,L:integer;
begin
L:=length(st);

Q1.Y:=round(T1.y+DY*TL);
Q2.X:=round(T2.x-DX*TL);
Q2.Y:=round(T2.y-DY*TL);
T1:=Q1;T2:=Q2;
DX:=T2.x-T1.x;DY:=T2.y-T1.y;
L:=sqrt(DX*DX+DY*DY);
If L=0 then exit;
TL:=RMuiTen/L;
P.X:=round(T2.x-DX*TL);
P.Y:=round(T2.y-DY*TL);
Q1:=Quay(P,T2,-35);
Q2:=Quay(P,T2,35);
pic.Canvas.Brush.Style:=bsSolid;
pic.Canvas.Brush.Color:=LineColor;
pic.Canvas.Pen.Color:=LineColor;
If Line then
begin pic.Canvas.MoveTo(T1.x,T1.y); pic.Canvas.LineTo(T2.x,T2.y) end;
Pic.Canvas.Polygon([point(T2.x,T2.y),point(Q1.x,Q1.y),point((T2.x+P.x) div 2,
(T2.y+P.y) div 2),point(Q2.x,Q2.y)]);
str(Gia:0:10,st);CatZeroThua(st);
142
Pic.Canvas.Font.Color:=TextColor;
Pic.Canvas.Font.Size:=TextSizeTrongSo;
Pic.Canvas.Brush.Style:=bsclear;
Pic.Canvas.TextOut(T2.x-((T2.x-T1.x) div 3),T2.y -((T2.y-T1.y)div 3),St);
end;
Function Delen(x,y,Width,Height:integer;DinhDown:integer):boolean;
Var i,W,H:integer;
begin
for i:=0 to G.SoDinh-1 do

Pic.Canvas.Brush.Style:=bsClear;
Pic.Canvas.BrushCopy(R,Bitmap,Rect(0,0,Bitmap.Width-1,Bitmap.Height-
1),RGB(255,255,255));
Bitmap.FreeImage;
Pic.Canvas.Font.Color:=rgb(0,255,0);
Pic.Canvas.Brush.Style:=bsClear;
W:=Pic.Canvas.TextWidth(ten);
143


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status