Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Описание процедур и функций




procedure TForm1.btn1Click – предназначена для ввода количества вершин, при нажатии позволяет увеличить количество на единицу.

procedure TForm1.btn2Click – предназначена для поиска пути. В качестве результата работы …

procedure TForm1.mniN2Click – предназначена для закрытия программы

procedure TForm1.btn3Click – предназначена для открытия контекстного меню.

OpenDialog1.InitialDir – загружает данные из исходного файла.

SaveDialog1.InitialDir – сохраняет данные в исходный файл.

 

Заключение

Изучены эвристический, приближенный и точный алгоритмы решения ЗК. Точные алгоритмы решения ЗК – это полный перебор или усовершенствованный перебор. Оба они, особенно первый, не эффективны при большом числе вершин графа.

Предложен собственный эффективный метод решения ЗК на основе построения выпуклого многоугольника и включения в него центральных вершин (городов).

Проведён анализ наиболее рациональных методов решения ЗК и определены области их эффективного действия: для малого числа вершин можно использовать точный метод лексического перебора; для большого числа вершин рациональнее применять метод ветвей и границ или метод автора работы (Анищенко Сергея Александровича).

Изучены практические применения ЗК и задачи с переналадками, сводимые к ЗК.

Приведены тексты программ, позволяющие решить ЗК различными методами.

Приложение

unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, Grids, Buttons, StdCtrls, ExtCtrls, Math;

 

type

TForm1 = class(TForm)

mm1: TMainMenu;

mniN1: TMenuItem;

lbledt1: TLabeledEdit;

btn1: TSpeedButton;

chk1: TCheckBox;

mniN2: TMenuItem;

bvl1: TBevel;

lbledt2: TLabeledEdit;

lbledt3: TLabeledEdit;

btn2: TButton;

grp1: TGroupBox;

strngrd1: TStringGrid;

grp2: TGroupBox;

strngrd2: TStringGrid;

strngrd3: TStringGrid;

lbl1: TLabel;

strngrd4: TStringGrid;

lbl2: TLabel;

N1: TMenuItem;

N2: TMenuItem;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

procedure btn1Click(Sender: TObject);

procedure mniN2Click(Sender: TObject);

procedure btn2Click(Sender: TObject);

procedure btn3Click(Sender: TObject);

procedure N1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

ver: integer;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.btn1Click(Sender: TObject);

var

i,j,f,b: integer;

begin Randomize;

strngrd1.ColCount:= StrToInt(lbledt1.text) + 1;

strngrd1.RowCount:= StrToInt(lbledt1.Text) + 1;

strngrd4.ColCount:= StrToInt(lbledt1.text) + 1;

strngrd4.RowCount:= StrToInt(lbledt1.Text) + 1;

ver:= StrToInt(lbledt1.Text) + 1;

strngrd2.RowCount:= ver;

//strngrd2.ColWidths[2]:= 40;

for i:= ver to ver-1 do begin

strngrd2.Cells[0,i]:= 'l' + IntToStr(i);

end;

for i:= 1 to ver-1 do begin

strngrd1.Cells[0,i]:= IntToStr(i);

strngrd1.Cells[i,0]:= IntToStr(i);

strngrd4.Cells[0,i]:= IntToStr(i);

strngrd4.Cells[i,0]:= IntToStr(i);

end;

if chk1.Checked = True then begin

for i:=1 to ver-1 do begin

for j:=1 to ver-1 do begin

if i=j then begin

strngrd1.Cells[i,j]:= '0';

strngrd4.Cells[i,j]:= '0';

end

else begin

b:= Random(5);

if b = 0 then begin

strngrd1.Cells[i,j]:= '100';

strngrd1.Cells[j,i]:= '100';

strngrd4.Cells[i,j]:= '100';

strngrd4.Cells[j,i]:= '100';

end;

if b <> 0 then begin

f:= RandomRange(1, 10);

strngrd1.Cells[i,j]:= IntToStr(f);

strngrd1.Cells[j,i]:= IntToStr(f);

strngrd4.Cells[i,j]:= IntToStr(f);

strngrd4.Cells[j,i]:= IntToStr(f);

end;

end;

end;

end;

end;

end;

 

procedure TForm1.mniN2Click(Sender: TObject);

begin

close;

end;

 

procedure label_change;

begin

 

end;

 

procedure TForm1.btn2Click(Sender: TObject);

var

end_way, begin_way, begin_way2, i, j, n, met, min, step: integer;

labels,labels_2: array of integer;

end_c, end_c2: Boolean;

begin

 

SetLength(labels, ver-1);

SetLength(labels_2, ver-1);

 

begin_way:= StrToInt(lbledt2.text);

begin_way2:= 0;

 

for i:= 0 to ver-2 do begin

labels[i]:= 5000;

end;

////

 

repeat

end_c:= false;

strngrd1.Cells[begin_way, begin_way]:= '500';

if begin_way = StrToInt(lbledt3.Text) then begin

break;

end;

 

n:= 0;

for i:= 1 to ver-1 do begin //ìåòêè

strngrd2.Cells[1,i]:= IntToStr(labels[n]);

inc(n);

end;

 

n:= 1;

for i:= 0 to ver-2 do begin

labels_2[i]:= begin_way2 + StrToInt(strngrd1.cells[n, begin_way]);

inc(n);

end;

 

 

for i:= 0 to ver-2 do begin

if labels[i] > labels_2[i] then

begin

labels[i]:= labels_2[i];

end;

end;

 

for i:= 1 to ver-1 do begin // çàïîëíÿåì òàáëèöó

strngrd1.Cells[i, begin_way]:= '500';

strngrd1.cells[begin_way, i]:= '500';

end;

 

n:= 0;

for i:= 1 to ver-1 do begin

strngrd2.Cells[2,i]:= IntToStr(labels[n]);

Inc(n);

end;

 

 

strngrd2.Cells[2,begin_way]:= ''; //î÷èùàåì ìåíüøåå

 

 

for i:= 1 to ver-1 do begin

if strngrd2.Cells[2,i] = '' then strngrd2.Cells[2,i]:= '500';

end;

 

min:= 1000;

 

for i:= 1 to ver-1 do begin

if StrToInt(strngrd2.cells[2, i]) < min then

begin

min:= StrToInt(strngrd2.cells[2, i]);

begin_way:= i;

begin_way2:= min;

end;

 

end;

strngrd2.cells[2, begin_way]:= '500';

 

n:= 0;

for i:= 1 to ver-1 do begin

labels[n]:= StrToInt(strngrd2.cells[2,i]);

inc(n);

end;

 

//showmessage(IntToStr(min));

//ShowMessage('Âåðøèíà: ' + IntToStr(begin_way));

if begin_way = StrToInt(lbledt3.Text) then end_c:= True;

until end_c;

lbl1.Caption:= IntToStr(min);

 

end;

 

procedure TForm1.btn3Click(Sender: TObject);

var

i,j: integer;

begin

strngrd3.RowCount:= ver;

strngrd3.Cells[1,0]:= 'M';

strngrd3.Cells[2,0]:= 'T';

for i:= 1 to ver-1 do begin

strngrd3.Cells[0,i]:= IntToStr(i);

end;

for i:= 1 to 2 do begin

for j:= 1 to ver-1 do begin

strngrd3.cells[i,j]:= '0';

end;

end;

for i:= 1 to ver-1 do begin

for j:= 1 to ver-1 do begin

if (strngrd1.Cells[j,i] <> '0') and (strngrd1.Cells[j,i] <> 'á') then begin

strngrd3.Cells[1,i]:= IntToStr(StrToInt(strngrd3.Cells[1,i]) + StrToInt(strngrd1.Cells[j,i]));

strngrd3.Cells[2,i]:= IntToStr(i);

end;

end;

end;

end;

 

procedure TForm1.N1Click(Sender: TObject);

var

f: file of integer;

n, i, j, t: integer;

begin

OpenDialog1.InitialDir:= GetCurrentDir;

if OpenDialog1.Execute then

begin

AssignFile(f, OpenDialog1.FileName);

reset(f);

read(f, n);

lbledt1.Text:= inttostr(n);

strngrd1.ColCount:= StrToInt(lbledt1.text) + 1;

strngrd1.RowCount:= StrToInt(lbledt1.Text) + 1;

strngrd4.ColCount:= StrToInt(lbledt1.text) + 1;

strngrd4.RowCount:= StrToInt(lbledt1.Text) + 1;

ver:= StrToInt(lbledt1.Text) + 1;

strngrd2.RowCount:= ver;

//strngrd2.ColWidths[2]:= 40;

for i:= ver to ver-1 do begin

strngrd2.Cells[0,i]:= 'l' + IntToStr(i);

end;

for i:= 1 to ver-1 do begin

strngrd1.Cells[0,i]:= IntToStr(i);

strngrd1.Cells[i,0]:= IntToStr(i);

strngrd4.Cells[0,i]:= IntToStr(i);

strngrd4.Cells[i,0]:= IntToStr(i);

end;

for i:= 1 to n-1 do

for j:= 1 to n-1 do

begin

read(f, t);

strngrd4.Cells[j,i]:= inttostr(t);

end;

closefile(f);

end;

end;

 

procedure TForm1.N2Click(Sender: TObject);

var

f: file of integer;

i, j, t: integer;

begin

SaveDialog1.InitialDir:= GetCurrentDir;

if SaveDialog1.Execute then

begin

AssignFile(f,SaveDialog1.FileName);

Rewrite(f);

t:= strngrd4.RowCount - 1;

write(f, t);

for i:=1 to strngrd4.RowCount-1 do

for j:=1 to strngrd4.RowCount-1 do

begin

t:= strtoint(strngrd4.Cells[j,i]);

write(f, t);

end;

closefile(f);

end;

end;

 

end.




Поделиться с друзьями:


Дата добавления: 2015-08-31; Просмотров: 295; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.