Автор: Пользователь скрыл имя, 26 Апреля 2012 в 01:27, дипломная работа
Мета. Ознайомлення з постановкою задачі комівояжера на графах та детальне вивчення різних алгоритмів розв’язання задачі комівояжера.
Об’єкт. Задача комівояжера та алгоритми її розв’язку.
Предмет. Розробка середовища та програмна реалізація деяких алгоритмів розв’язку задачі комівояжера
for i:= 1 to NN*2 do
begin
Puti[i]:=0;
NewPut[i]:=0;
end;
Label3.Caption:='';
Image1.Picture.Bitmap.canvas.
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;
{Предварительный
этап. Определения исходного
Etap(GIndexKon[0,1]);
GIndexKon[0,2]:=GIndexKon[0,1]
{Вывод G0 на экран в виде вершины дерева}
Tree(0,0,0,0,0,0,0,GIndexKon[
{Определение множества конкурирующих пар и выбор перспективной пары}
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-
GIndexKon[i,2]:=GIndexKon[i,2]
else begin GIndexKon[i,2]:=GIndexKon[i,2]
K:=K+1;
End;
{Вывод подмножества G(i,2) на экран в виде листа дерева}
Tree(K,2,i,i-1,RGor,MGor,1,
{Удаление 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-
GIndexKon[i,1]:=GIndexKon[i,1]
else GIndexKon[i,1]:=GIndexKon[i,1]
Label6.Caption:='Довжина туру:
{Вывод подмножества G(i,1) на экран в виде листа дерева}
Tree(K,1,i,i-1,RGor,MGor,0,
{Определение множества конкурирующих пар и выбор перспективной пары}
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:=
ObjLabel('Label2',i).Visible:=
for j:=1 to NN do
ObjEdit('Edit',i,j).Visible:=
end;
N:=StrToInt(ComboBox1.Text);
for i:=1 to N do
begin
ObjLabel('Label1',i).Visible:=
ObjLabel('Label2',i).Visible:=
for j:=1 to N do
ObjEdit('Edit',i,j).Visible:=
end;
end;
procedure TForm1.N2Click(Sender: TObject);
var
FInput:Integer;
i,j:byte;
s,num:integer;
begin
Sbros;
OpenDialog1.InitialDir:=
OpenDialog1.Filter:='Файл Коммивояжера (*.kom)|*.kom';
if not OpenDialog1.Execute then exit;
FInput:=FileOpen(OpenDialog1.
FileRead(FInput,num,sizeof(
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:=
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:=
SaveDialog1.Filter:='Файл Коммивояжера(*.kom)|*.kom';
if not SaveDialog1.Execute then exit;
FOutput:=FileOpen(SaveDialog1.
if FOutput=-1 then
FOutput:=FileCreate(
num:=StrToInt(ComboBox1.Text);
FileWrite(FOutput,num,sizeof(
for i:=1 to num do
for j:=1 to num do
if i<>j then
begin
s:=StrToInt(ObjEdit('Edit',i,
FileWrite(FOutput,s,SizeOf(s))
end;
FileClose(FOutput);
ChangeFileExt(SaveDialog1.
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N9Click(Sender: TObject);
var
FInput:Integer;
i,j:byte;
s,num:integer;
begin
Form1.Sbros;
FInput:=FileOpen('zero.kom',
FileRead(FInput,num,sizeof(
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:=
end;
ComboBox1.ItemIndex:=num-2;
ComboBox1Change(ComboBox1);
FileClose(FInput);
end;
end.