Программа создана на языке паскаль (Delphi 7) по алгоритму рекурсивного поиска
For c:=1 to N do { проверяем все вершины }. If (map 0) and (NOT incl) and ((len=0)or (clen+map< len)) then. Ввод описания карты из SrtingGrid. Cells}. I, j: integer; // выбор очередной точки. Procedure SaveGrid (stringgrid: tstringgrid; fn: string); For i :=1 to N do road: ='0'; //StringGrid1.Cells; Вывод найденного маршрута }. N:=LoadGrid (stringgrid1, Opendialog1. fileName)-1; Label1. caption… Читать ещё >
Программа создана на языке паскаль (Delphi 7) по алгоритму рекурсивного поиска (реферат, курсовая, диплом, контрольная)
Текст программного модуля:
unit recurs;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, StdCtrls, Grids, Mask, ExtDlgs;
type.
TForm1 = class (TForm).
Button1: TButton;
Label1: TLabel;
StringGrid1: TStringGrid;
Edit1: TEdit;
Edit2: TEdit;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button2: TButton;
Button3: TButton;
Edit3: TEdit;
SaveDialog1: TSaveDialog;
Button4: TButton;
OpenDialog1: TOpenDialog;
Label5: TLabel;
procedure Button1Click (Sender: TObject);
procedure Button2Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure StrGrefresh (N:integer);
procedure Button3Click (Sender: TObject);
procedure Button4Click (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
Form1: TForm1;
N:integer;{ кол-во вершин графа}.
implementation.
{$R *.dfm}.
procedure TForm1. Button1Click (Sender: TObject);
var.
map:array[1.100,1.100]of integer;// Карта. map[i, j] не 0, если // точки i и j соединены.
road:array[1.100]of string;// Дорога — номера точек карты.
incl:array[1.100]of boolean; // incl[1]равен TRUE, если точка с номером i включена в road.
start, finish: integer; // Начальная и конечная точки.
found:boolean; len: integer; // длина найденного (минимального) маршрута.
clen:integer; // длина текущего (формируемого) маршрута.
i, j: integer; // выбор очередной точки.
procedure step (s, f, p:integer);
var.
c:integer; { Номер точки, в которую делаем очередной шаг }.
tmp :string;
i:integer;
begin.
if s=f then begin.
found:=TRUE;
len:=clen;{ сохраним длину найденного маршрута }.
{ вывод найденного маршрута }.
Label1.caption:= Label1. caption+StringGrid1.Cells[Start, 0];
for i:=1 to p-1 do.
IF incl[i] then.
Label1.caption:=Label1.caption+' '+road[i];
Label1.caption:=Label1.caption+', длина:'+IntToStr (len)+#13;
end.
else.
{ выбираем очередную точку }.
for c:=1 to N do { проверяем все вершины }.
if (map[s, c] 0) and (NOT incl[c]) and ((len=0)or (clen+map[s, c]< len)) then.
begin // точка соединена с текущей, но не включена в маршрут.
road[p]: =StringGrid1.Cells[0, c]; { добавим вершину в путь }.
incl[p]: =TRUE;{ пометим вершину как включенную }.
clen:=clen+map[s, c];
step (c, f, p+1);
incl[p]: =FALSE;
road[p]: ='0'; //StringGrid1.Cells[c, 0];
clen:=clen-map[s, c];
end;
end;
{ конец процедуры step }.
begin.
Label1.caption:='';
{ инициализация массивов }.
found:=False;
for i :=1 to N do road[i]: ='0'; //StringGrid1.Cells[i, 0];
for i:=1 to N do incl[i]: =FALSE;
{ ввод описания карты из SrtingGrid. Cells}.
for i:=1 to N do.
for j:=1 to N do.
if (StringGrid1.Cells[i, j] '') then.
map[i, j]: =StrToInt (StringGrid1.Cells[i, j]).
else.
map[i, j]: =0;
len:=0; // длина найденного (минимального) маршрута с.
clen:=0; // длина текущего (формируемого) маршрута.
{ Поиск стартовой точки }.
start:=-1;
for i:=1 to N do.
if uppercase (Edit1.text)=StringGrid1.Cells[i, 0] then.
start:=i;;
finish:=-1;
for i:=1 to N do.
if uppercase (Edit2.text)=StringGrid1.Cells[i, 0] then.
finish:=i;;
if (start=-1) or (finish=-1) then begin.
showmessage ('Неверные параметры старта или финиша !!!');
exit;
end;
road[1]: =StringGrid1.Cells[0,start];{ внесем точку в маршрут }.
incl[start]: =TRUE;{ пометим ее как включенную }.
step (start, finish, 2);{ищем вторую точку маршрута }.
if not found // проверим, найден ли хотя бы один путь.
then Label1. caption:='Указанные точки не соединены!';
end;
procedure TForm1. StrGrefresh (N:integer);
begin.
stringgrid1.ColCount:=N;
stringgrid1.RowCount:=N;
stringgrid1.Refresh;
end;
procedure TForm1. Button2Click (Sender: TObject);
begin.
N:=strtoint (edit3.Text);
StrGrefresh (N+1);
end;
procedure TForm1. FormCreate (Sender: TObject);
begin.
N:=1;
edit3.Text:=inttostr (N);
StrGrefresh (N+1);
end;
procedure TForm1. Button3Click (Sender: TObject);
Function LoadGrid (stringgrid: tstringgrid; fn: string):integer;
var.
f: textfile;
temp, x, y: integer;
tempstr: string;
begin.
assignfile (f, fn);
reset (f);
readln (f, temp);
stringgrid.colcount := temp;
Result:=temp;
readln (f, temp);
stringgrid.rowcount := temp;
for X := 0 to stringgrid. colcount — 1 do.
for y := 0 to stringgrid. rowcount — 1 do.
begin.
readln (F, tempstr);
stringgrid.cells[x, y] := tempstr;
end;
closefile (f);
end;
begin.
if (opendialog1.execute) then.
begin.
N:=LoadGrid (stringgrid1, Opendialog1. fileName)-1;
edit3.Text:=inttostr (N);
Label5.Caption:=OpenDialog1.FileName;
end;
end;
procedure TForm1. Button4Click (Sender: TObject);
procedure SaveGrid (stringgrid: tstringgrid; fn: string);
var.
f: textfile;
x, y: integer;
begin.
assignfile (f, fn);
rewrite (f);
writeln (f, stringgrid. colcount);
writeln (f, stringgrid. rowcount);
for X := 0 to stringgrid. colcount — 1 do.
for y := 0 to stringgrid. rowcount — 1 do.
writeln (F, stringgrid. cells[x, y]);
closefile (f);
end;
begin.
if SaveDialog1. Execute then begin.
SaveGrid (stringgrid1, SaveDialog1. FileName);
Label5.Caption:=SaveDialog1.FileName;
end;
end;
end.