Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






procedure TForm1.Sbros;





var

i,j:integer;

begin

K:=-1;

for i:=1 to NN do

begin

Ci[i]:=0;

Cj[i]:=0;

IsklStrok[i]:=0;

IsklStolb[i]:=0;

for j:=1 to NN do

GorodaIJ[i,j]:=0;

end;

for i:=0 to NN do

for j:=0 to 2 do

GIndexKon[i,j]:=0;

for i:= 1 to NN*2 do

begin

Puti[i]:=0;

NewPut[i]:=0;

end;

Label3.Caption:='';

Image1.Picture.Bitmap.canvas.fillrect(canvas.cliprect);

 

if N>6 then

begin

Image1.Width:=250+(N-6)*30;

Image1.Height:=310+(N-6)*50;

Image1.Picture.Bitmap.Width:= Image1.Width;

Image1.Picture.Bitmap.Height:= Image1.Height;

Form1.Height:=395+(N-6)*50;

Form1.Width:=640+(N-6)*30;

end

else

begin

Image1.Width:=250;

Image1.Height:=310;

Form1.Height:=445;

Form1.Width:=640;

end;

end;

//Процедура натискання кнопки початку

procedure TForm1.BitBtn1Click (Sender: TObject);

var

i,RGor,MGor:byte;

Flag:boolean;

begin

K:=-1;

//Отримання кількості міст

N:=StrToInt(ComboBox1.Text);

//Очищення всіх значень на 0

Sbros;

Flag:=true;

//Ввід матриці довжин шляхів між містами

InputMatrix;

//Попередній етап. Визначення початкової множини G0

Etap(GIndexKon[0,1]);

GIndexKon[0,2]:=GIndexKon[0,1];

//Вивід G0 на екран у вигляді вершини дерева

Tree(0,0,0,0,0,0,0,GIndexKon[0,1]);

//Визначення множини конкуруючих пар і вибір перспективної пари

Konkurir(RGor,MGor);

Puti[1]:=RGor;

Puti[2]:=MGor;

GorodaIJ[RGor,MGor]:=-1;

//i-ті ітерації.

for i:=1 to N-1 do

if Flag then

begin

//Визначення множини G(i,2)

Etap(GIndexKon[i,2]);

if GIndexKon[i-1,1]<GIndexKon[i-1,2] then

GIndexKon[i,2]:=GIndexKon[i,2]+GIndexKon[i-1,1]

else begin GIndexKon[i,2]:=GIndexKon[i,2]+GIndexKon[i-1,2];

K:=K+1;

End;

//Вивід підмножини G(i,2) на екран в виглячді листа дерева

Tree(K,2,i,i-1,RGor,MGor,1,GIndexKon[i,2]);

//Видалення RGor'ой рядка і MGor'ого стовпця

DelStrStolb(RGor,MGor);

IsklStrok[RGor]:=1;

IsklStolb[MGor]:=1;

//Виклик процедури запобігання виникнення коротких і довгих підциклів

ProverkaIskl;

// Визначення множиниG(i,1)

Etap(GIndexKon[i,1]);

if GIndexKon[i-1,1]<GIndexKon[i-1,2] then

GIndexKon[i,1]:=GIndexKon[i,1]+GIndexKon[i-1,1]

else GIndexKon[i,1]:=GIndexKon[i,1]+GIndexKon[i-1,2];

Label6.Caption:='Длина пути: '+IntToStr(GIndexKon[i,1]);

//Вивід під множини G(i,1) на екран у вигляді листа дерева

Tree(K,1,i,i-1,RGor,MGor,0,GIndexKon[i,1]);

//Визначення множини конкуруючих пар і вибір перспективної пари

Konkurir(RGor,MGor);

if ParKonkur[RGor,MGor]>=0 then

begin

Puti[i*2+1]:=RGor;

Puti[i*2+2]:=MGor;

end;

if ParKonkur[RGor,MGor]<0 then Flag:=false;

IsklStrok[RGor]:=1;

IsklStolb[MGor]:=1;

GorodaIJ[RGor,MGor]:=-1;

end;

//Визначення оптимального маршруту

OpredilPuti;

end;

procedure TForm1.ComboBox1Change (Sender: TObject);

var

i,j:byte;

begin

for i:=1 to NN do

begin

ObjLabel('Label1',i).Visible:=False;

ObjLabel('Label2',i).Visible:=False;

for j:=1 to NN do

ObjEdit('Edit',i,j).Visible:=False;

end;

N:=StrToInt(ComboBox1.Text);

for i:=1 to N do

begin

ObjLabel('Label1',i).Visible:=True;

ObjLabel('Label2',i).Visible:=True;

for j:=1 to N do

ObjEdit('Edit',i,j).Visible:=True;

end;

end;

procedure TForm1.N2Click (Sender: TObject);

var

FInput:Integer;

i,j:byte;

s,num:integer;

begin

Sbros;

OpenDialog1.InitialDir:=Application.ExeName;

OpenDialog1.Filter:='Файл Коммивояжера (*.kom)|*.kom';

if not OpenDialog1.Execute then exit;

FInput:=FileOpen(OpenDialog1.FileName,fmOpenRead);

FileRead(FInput,num,sizeof(num));

for i:=1 to num do

for j:=1 to num do

if i<>j then

begin

FileRead(FInput,s,sizeof(s));

ObjEdit('Edit',i,j).Text:=IntToStr(s);

end;

ComboBox1.ItemIndex:=num-2;

ComboBox1Change(ComboBox1);

FileClose(FInput);

end;

procedure TForm1.N3Click (Sender: TObject);

var

FOutput:Integer;

i,j:byte;

s,num:integer;

begin

SaveDialog1.InitialDir:=Application.ExeName;

SaveDialog1.Filter:='Файл Коммивояжера(*.kom)|*.kom';

if not SaveDialog1.Execute then exit;

FOutput:=FileOpen(SaveDialog1.FileName,fmOpenWrite);

if FOutput=-1 then

FOutput:=FileCreate(ChangeFileExt(SaveDialog1.FileName,'.kom'));

num:=StrToInt(ComboBox1.Text);

FileWrite(FOutput,num,sizeof(num));

for i:=1 to num do

for j:=1 to num do

if i<>j then

begin

s:=StrToInt(ObjEdit('Edit',i,j).Text);

FileWrite(FOutput,s,SizeOf(s));

end;

FileClose(FOutput);

ChangeFileExt(SaveDialog1.FileName,'.kom');

end;

procedure TForm1.N4Click (Sender: TObject);

begin

Close;

end;

end.

 

Список використаної літератури

1. Фиакко А., Мак-Кормик Г. Нелинейное программирование. Методы последовательной безусловной минимизации. - М.: Мир, 1972.

2. Сухарев А.Г., Тимохов А.В., Федоров В.В. Курс методов оптимизации. - М.: Наука, 1986.

3. Акулич И.Л. Математическое программирование в примерах и задачах. М.: Высшая школа, 1986.

 


Date: 2015-08-24; view: 339; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию