Задача комівояжера — 1

Перегляд у форматі PDF

Надіслати розв'язок

Бали: 10,00 (partial)
Time limit: 0.5s
Memory limit: 256M
Input: stdin
Output: stdout

Problem type

На площині задані координати ~n~ (~4\leqslant n\leqslant 12~) різних вершин.

Знайти довжину найкоротшого замкнутого маршруту, що починається і закінчується в 1-й вершині і відвідує всі інші вершини по одному разу. Дозволяється (якщо так виявляється вигідно) «проїжджати через вершину, не зупиняючись» (див. приклад 1).

Довжина маршруту обчислюється як сума довжин складових його ребер, довжини окремих ребер обчислюються згідно звичайної евклідової метрики, як ~\sqrt{(x_A-x_B)^2+(y_A-y_B)^2}~.

Вхідні дані

Перший рядок містить кількість вершин ~n~ (~4\leqslant n\leqslant 12~). Кожен з наступних ~n~ рядків містить по два розділених пропуском числа з плаваючою точкою – ~x~- та ~y~-координати відповідної вершини.

Результати

Результати повинні містити єдине число (з плаваючою крапкою) – знайдену мінімальну довжину замкнутого маршруту.

Відповідь зараховується, коли абсолютна або відносна похибка (хоча б одна з них) не перевищує ~10^{-9}~.

Приклади

Вхід

4
0 0
2 0.2
7 0.7
5 0.5

Результат

1.40698258695692E+0001

Вхід

5
1 0
4 4
3 2
4 0
1 1

Результат

1.24721359549995E+0001

Примітки

Задача з такими обмеженнями, по ідеї, повинна вирішуватися хоч методом гілок і меж, хоч динамічним програмуванням по підмножинам, хоч самими лише відтинаннями пошуку з поверненням (backtracking), що не намагається оцінювати можливий діапазон довжин ще не збудованої частини шляху.


Коментарі

Please read the guidelines before commenting.


Ще немає коментарів.