Графовые модели. Остов минимального веса

Курсовой проект - Математика и статистика

Другие курсовые по предмету Математика и статистика

FormShow(Sender: TObject);

procedure BitBtn4Click(Sender: TObject);

procedure sgClick(Sender: TObject);

procedure srClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

f:file of integer;

idown,n,wrt,i,j:integer;

a,ar:array[1..10,1..10] of integer;

m:array[1..10] of integer;

vx:array[1..10] of integer;

vy:array[1..10] of integer;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var

t,i:integer;

begin

n:=8; {изначально число вершин=8}

SpeedButton3.Enabled:=True;

idown:=1;

speedbutton7.click;

image1.Canvas.brush.color:= clwhite;

image1.Canvas.pen.Color:=clwhite;

image2.Canvas.brush.color:= clwhite;

image2.Canvas.pen.Color:=clwhite;

image1.Canvas.Rectangle(0,0,image1.Width,image1.Height);

image2.Canvas.Rectangle(0,0,image1.Width,image1.Height);

for i:=1 to sr.ColCount do

for j:=1 to sr.Rowcount do begin

sr.Cells[i,j]:=;

end;

for i:=1 to sg.ColCount do

for j:=1 to sg.Rowcount do begin

sg.Cells[i,j]:=;

edit1.Text:= inttostr(t);

for t:=1 to n do begin

sg.Cells[t,t]:=-;

sr.Cells[t,t]:=-;

end; end;

edit1.Text:= inttostr(n);

end;

procedure TForm1.SpeedButton3Click(Sender: TObject);

var

o,min,imin,jmin:integer;

begin

SpeedButton3.Enabled:=false;

assignfile(f,extractfilepath(application.ExeName)+\in.krs);

rewrite(f);

for i:= 1 to n do

for j:= 1 to n do

begin

if sg.cells[i,j]=- then

wrt:=999

else

wrt:=strtoint(sg.cells[i,j]);

write(f,wrt);

end;

closefile(f);

assignfile(f,extractfilepath(application.exename)+\in.krs);

reset(f);

for i:= 1 to n do

for j:= 1 to n do

begin

read(f,wrt);

if wrt=999 then

sg.cells[i,j]:=-

else

sg.cells[i,j]:= inttostr(wrt);

a[i,j]:=wrt;

end;

closefile(f);

for i:=1 to n do

m[i]:=0;

m[1]:=1;

repeat

o:=0;

min:=100; imin:=1; jmin:=1;

for i:= 1 to n do

if m[i]=1 then

for j:= 1 to n do

if (a[i,j]1) then

begin

if a[i,j]<min then

begin

min:= a[i,j];

imin:=i;

jmin:=j;

o:=1;

end; end;

if o=1 then

begin

ar[imin,jmin]:=min;

ar[jmin,imin]:=min;

m[jmin]:=1;

end;

until o=0;

speedbutton4.Click;

end;

procedure TForm1.SpeedButton4Click(Sender: TObject);

begin

for i:= 1 to n do

for j:= 1 to n do

begin

if ar[i,j]=0 then

sr.cells[i,j]:=-

else

sr.cells[i,j]:=inttostr(ar[i,j]);

end;

end;

procedure TForm1.SpeedButton5Click(Sender: TObject);

var

i,x,y:integer;

begin

idown:=1;

form1.canvas.Refresh;

if checkbox1.Checked then speedbutton8.Click;

image1.Canvas.brush.color:= clwhite;

image1.Canvas.pen.Color:=clwhite;

image2.Canvas.brush.color:= clwhite;

image2.Canvas.pen.Color:=clwhite;

image1.Canvas.Rectangle(0,0,image1.Width,image1.Height);

image2.Canvas.Rectangle(0,0,image1.Width,image1.Height);

with image1.Canvas do

begin

brush.color:= cllime;

pen.Color:=clblue;

font.Name:=Courier;

font.Size:=8;

for i:= 1 to n do

for j:=1 to n do

if (a[i,j]<>0) and (a[i,j]<900) then

begin

pen.Width:=1;

moveto(vx[i]+7,vy[i]+7);

lineto(vx[j]+7,vy[j]+7);

brush.color:= clwhite;

textout(round((vx[i]+vx[j]+4)/2),round((vy[i]+vy[j]+1)/2),inttostr(a[i,j]));

end;

brush.color:= cllime;

for i:= 1 to n do

begin

font.Size:=1;

rectangle(vx[i],vy[i],vx[i]+15,vy[i]+15);

textout(vx[i]+4,vy[i]+1,inttostr(i));

end;

end;

with image2.Canvas do

begin

brush.color:= clLime;

pen.Color:=clblue;

font.Name:=Courier;

font.Size:=8;

for i:= 1 to n do

for j:=1 to n do

if (ar[i,j]<>0) and (ar[i,j]<900) then

begin

pen.Width:=1;

moveto(vx[i]+7,vy[i]+7);

lineto(vx[j]+7,vy[j]+7);

brush.color:= clwhite;

textout(round((vx[i]+vx[j]+4)/2),round((vy[i]+vy[j]+1)/2),inttostr(ar[i,j]));

end;

brush.color:= cllime;

for i:= 1 to n do

begin

font.Size:=1;

rectangle(vx[i],vy[i],vx[i]+15,vy[i]+15);

textout(vx[i]+4,vy[i]+1,inttostr(i));

end; end; end;

procedure TForm1.SpeedButton7Click(Sender: TObject);

var

i:integer;

begin

for i:= 1 to n do

begin

sg.ColCount:=n+1;

sg.Rowcount:=n+1;

sr.ColCount:=n+1;

sr.Rowcount:=n+1;

sg.Cells[0,i]:=inttostr(i);

sr.Cells[0,i]:=inttostr(i);

sg.Cells[i,0]:=inttostr(i);

sr.Cells[i,0]:=inttostr(i); end;

for i:= 1 to n do

for j:= 1 to n do

begin

ar[i,j]:=0;

end;

end;

procedure TForm1.Image2DblClick(Sender: TObject);

begin

timer1.Enabled:=true;

end;

procedure TForm1.SpeedButton8Click(Sender: TObject);

begin

for i:= 1 to n do

begin

vx[i]:=random(470);

vy[i]:=random(230);

end; end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

vx[idown]:=x;

vy[idown]:=y;

idown:=idown+1;

image1.Canvas.brush.color:= cllime;

image1.Canvas.pen.Color:=clblue;

image1.Canvas.Rectangle(x-1,y-1,x+1,y+1);

end;

procedure TForm1.Image2Click(Sender: TObject);

begin

image1.Canvas.brush.color:= clwhite;

image1.Canvas.pen.Color:=clwhite;

image2.Canvas.brush.color:= clwhite;

image2.Canvas.pen.Color:=clwhite;

image1.Canvas.Rectangle(0,0,image1.Width,image1.Height);

image2.Canvas.Rectangle(0,0,image1.Width,image1.Height); timer1.Enabled:=false;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

n:= strtoint(edit1.text);

speedbutton7.Click;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

var i:integer;

begin

if MessageDlg(Завершить работу,mtConfirmation,[mbyes,mbno],0) = mrYes then begin

AlphaBlend:=true;

i:=255;

while i>0 do begin

AlphaBlendValue:=i;

Application.ProcessMessages;

dec(i,1);

end;close;end;end;

procedure TForm1.FormShow(Sender: TObject);

begin

Edit1.SetFocus;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

begin

form2.show;

end;

procedure TForm1.sgClick(Sender: TObject);

var i,j:integer;

begin

for i:= 1 to n do

for j:= 1 to n do

begin

sg.Cells[i,j]:=sg.Cells[j,i];

end;

end;

procedure TForm1.srClick(Sender: TObject);

var i,j:integer;

begin

for i:= 1 to n do

for j:= 1 to n do

begin

sr.Cells[i,j]:=sr.Cells[j,i];

end; end; end.

Приложение Б: исходные файлы