Лабы / 4
.docxЗадание:
2. |
Дан связный неориентированный граф G=(V,E). (рис.2)
Граф задан с помощью матрицы смежности. Найти: используя алгоритм поиска в глубину, построить и вывести в объект на форму одиночный каркас( остовное дерево ). |
Код: unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ComObj, StdCtrls, Grids; //добавила ComObj
type
TForm5 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
Edit2: TEdit;
Label3: TLabel;
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
Excel: Variant; //переменную добавила
var
n,t,i,j,t1:integer;
Proidena: array [1..10] of boolean;
A: array of array of integer;
implementation
{$R *.dfm}
procedure TForm5.FormCreate(Sender: TObject);
var
x,y:integer;
begin
Excel:=CreateOleObject('Excel.Application');
Excel.Application.WorkBooks.Add('E:\Второй курс\1 семестр\Программирование\граф.xlsx'); //для планшета
//Excel.Application.WorkBooks.Add('F:\граф.xlsx'); //для компа
//Excel.Visible:=True; //После отладки можно закомментировать эту строку
Excel.DisplayAlerts:=False;
for x := 1 to StringGrid1.ColCount - 1 do
StringGrid1.Cells[x, 0] := IntToStr(x);
for y := 1 to StringGrid1.ColCount - 1 do
StringGrid1.Cells[0, y] := IntToStr(y);
end;
procedure TForm5.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
try
Excel.Quit;
except
end;
CanClose:=True;
end;
procedure TForm5.Button1Click(Sender: TObject);
var i,j:integer;
begin
with StringGrid1 do
for i:=1 to RowCount do
for j:=1 to ColCount do
Cells[j, i]:=Excel.WorkSheets.Item['лист1'].Cells[i, j];
//
end;
procedure TForm5.Button2Click(Sender: TObject);
procedure vis(v,k: integer);
begin
Proidena[v] := true;
i:=1;
repeat
A[v,i]:=strtoint(StringGrid1.Cells[i,v]);
if (A[v, i]<>0) and (Proidena[i]=false) then begin
memo1.lines.add(inttostr(v)+'-'+inttostr(i));
vis(i,k);
end;
i:=i+1;
until i>k;
end;
begin
n:=strtoint(edit1.text);
t:=strtoint(edit2.text);
t1:=t+1;
setlength(A,t1,t1);
vis(n,t);
end;
end;
Результат:
Блок схема:
Ввод
n,t Начало
vis(n,t);
end
procedure vis(v,k: integer);
Proidena[v]
:= true;
i:=1;
i<=k end
-
A[v,i]:=strtoint(StringGrid1.Cells[i,v]);
-
+
v:=i;