- •1.Теоретична частина
- •1.1.Теоретична частина з математики
- •Методи розв’язку задачі
- •1.2.Теоретична частина з інформатики
- •2.Опис роботи
- •3.С труктурна схема
- •4.П осібник користувача Теорія
- •Як користуватися розділом «Методи розв’язання задачі» Алгоритм користування
- •Як завантажити до матриці данні з файлу
- •Як користуватися розділом «Тур по Україні» Алгоритм користування
- •5.Фрагменти програмного коду
- •5.1.Метод повного перебору
- •5.2.Метод гілок та меж
- •5.3.Жадібний алгоритм
- •6.Апаратні вимоги
- •7.Комплектація програми
- •8.Напрямки використання
- •Висновки
- •Додатки Список літератури:
- •Список інтернет-джерел:
Як завантажити до матриці данні з файлу
При завантаження з файлу даних до матриці даних у програмі існують певні критерії щодо цього файлу:
Файл повинен бути текстовим документом з розширенням «.txt»;
У файлі в першому рядку, через пробіл, повинно бути записано кількість рядків та кількість стовпчиків. (Для матриці задачі комівояжера кількість стовпчиків та рядків однакова, тому у файлі в першому рядку треба записати два однакових числа);
Починаючи з другого рядка файлу, треба записати матрицю даних у формі таблиці.
Цим трьом критеріям треба слідкувати обов’язково, бо без них данні не завантажаться до матриці в програмі.
Приклад організування текстового файлу «MATR.TXT»:
4 4
0 2 16 3
2 0 10 8
16 10 0 11
3 8 11 0
Як користуватися розділом «Тур по Україні» Алгоритм користування
Щоб отримати оптимальний маршрут між обласними центрами, які хоче відвідати користувач, треба слідувати чіткому алгоритму (можна дивитися у підказки, вони дають чіткі інструкції).
Спочатку на карті України треба вибрати перший обласний центр з якого ви починаєте свій тур і до якого вам треба повернутися. Далі ви вибираєте на карті усі обласні центри які хочете відвідати, і закінчивши це, вибираєте метод розв’язку задачі. Коли все буде готово натисніть кнопку «Підрахувати» і вам видасться найоптимальніший маршрут та його відстань у кілометрах.
Коли ви отримаєте свій результат, щоб почати заново, треба спочатку очистити всі поля і карту України кнопкою «Очистити все».
Щоб звіритися з даними відстаней між обласними центрами ви можете продивитися довідник відстаней між обласними центрами, натиснув на кнопку «Таблиця відстаней між обласними центрами».
Призначення кнопок та інформаційних полей
-
Карта України з обласними центрами. При
натисканні на один з обласних центрів
він виділяється, запам’ятовується у
пам’яті програми і записується до
списку «Перелік областей, що входять
до маршруту».
- В цей список записуються обласні центри, які ви вибрали на карті.
-
Методи розв’язку, після вибору областей
які ви хочете об’їхати потрібно вибрати
один із методів розв’язку задачі. За
базовими налаштуваннями стоїть метод
повного перебору.
-
Після вибору областей, які користувач
хоче об’їхати можна нажати цю кнопку.
Вона рахує най оптимальний шлях і видає
його довжину.
- Поля видачі результату.
- Очищає усі поля. Кнопку слід застосовувати коли ви вже розв’язали задачу і хочете очистити все, щоб записати нові данні і розв’язати іншу задачу.
- Відкриває таблицю відстаней між обласними центрами України. Працює як справ очник, для користувача.
5.Фрагменти програмного коду
5.1.Метод повного перебору
{********************** ПОВНИЙ ПЕРЕБІР*****************************}
procedure Perebor;
var i,j:byte;
begin
Matr:=a;
for i:=1 to N do
begin
Ver[i]:=i;
l[i]:=1;
M_flag[i]:=true;
end;
Ver[N+1]:=Ver[1];
l[N]:=0;
minLen:=10.E+6;
for i:=1 to N+1 do
minPath[i]:=0;
i:=1;
while i<n do
begin
flag:=PathLength(Ver,lenPath);
if flag =true then
if lenPath < minLen then
begin
minLen:=lenPath;
minPath:=Ver;
end;
i:=1; xpos:=0;
while l[i]=n-i+1 do
begin
m_flag[i]:= not m_flag[i];
l[i]:=1;
if m_flag[i] then xpos:=xpos+1;
i:=i+1;
end;
if i<n then
begin
if m_flag[i] then k:=l[i]+xpos
else k:=n-i+1-l[i]+xpos;
x:=Ver[k];Ver[k]:=Ver[k+1]; Ver[k+1]:=x;
Ver[N+1]:=Ver[1];
l[i]:=l[i]+1;
end;
end;
end;
function PathLength(var Path: ShortPath; var l:double): Boolean;
var flag: boolean;
i : byte;
eps : double;
begin
Eps:= 1.E-10;
flag:= true;
i:=1; l:=0;
while (flag = true) and (i<=N) do
begin
if (matr[path[i], path[i+1]])>EPS then
l:=l+matr[path[i], path[i+1]]
else flag:=false;
i:=i+1;
end;
Result:=flag;
{ pathlength:=flag;}
end;
{*************************** ПОВНИЙ ПЕРЕБІР*****************************}
