Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
procedure TForm1.Sbros; ⇐ ПредыдущаяСтр 3 из 3 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.
|