|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
|
Кратчайший путь по графу17.11.2021, 12:29. Показов 6873. Ответов 17
Есть граф, все вершины соединены между собой, известны расстояния между каждой парой вершин. Также известна начальная вершина и конечная.
Нужно перейти от начальной до конечной вершины, посетив все остальные, при этом пройтись по кратчайшему пути. Помогите, пжлст, подобрать нужный алгоритм. А ещё лучше написать код с этим алгоритмом на Python, либо словесно детально описать его.
0
|
|
| 17.11.2021, 12:29 | |
|
Ответы с готовыми решениями:
17
Найти кратчайший путь
|
|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
|
| 17.11.2021, 13:36 [ТС] | |
|
Там не совсем граф. Координатная плоскость, даны координаты всех точек + координаты начальной и конечной, нужно пройти из начала в конец через все точки. Для проекта нужно, сформулированного задания нет. Расстояния между точками я могу найти и занести в матрицу, а что с этим всем дальше делать не понимаю.
0
|
|
|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
|
| 17.11.2021, 20:19 [ТС] | |
|
Это не всегда кратчайший путь, приведу пример: Начало 71;36, конец 8;18. Нужно посетить точки 12:45 и 79;90.
Если посещать ближайшие, то выйдет путь начало (71;36) > 12;45 > 79;90 > конец (8;18) А кратчайший путь будет путь начало (71;36) > 79;90 > 12;45 > конец (8;18) Потому и ищу алгоритм для нахождения кратчайшего пути :/
0
|
|
|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
|
| 17.11.2021, 22:46 [ТС] | |
|
Ошибочка вышла... Тогда за место 79, 90 возьмём 100,100
Как мне кажется, ближайший путь нужно искать исходя из того, что сначала нужно посетить все точки за начальной (отдаляясь от начальной и от конечной, причём до начальной расстояние меньше, чем до конечной). После пройтись по всем точкам между начальной и конечной. А далее пройтись по всем точкам за конечной и прийти в конечную. Но я не знаю по какому принципу посещать эти три группы точек так, чтобы в итоге получился кратчайший путь. Может быть всё-таки есть какой-нибудь подходящий алгоритм для графов?)
0
|
|
|
Супер-модератор
|
|
| 18.11.2021, 09:59 | |
|
Здесь действительно полный граф. Каждая вершина соединена с каждой. Искать кратчайший путь из A в Б можно алгоритмом Форда-Беллмана или Дейкстры. Но эти алгоритмы ищут кратчайший путь, который не обязан включать все вершины. Боюсь, что здесь - только прямой перебор (а это O(n!)). Cколько точек, кстати?
0
|
|
|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
|
| 18.11.2021, 15:52 [ТС] | |
|
Нет точного кол-ва, думаю, не более 100, а скорее и нескольких десятков хватит.
0
|
|
|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
||||||
| 18.11.2021, 17:19 [ТС] | ||||||
|
Ну, значит обойдусь парой десятков. У меня нет внешних ограничений, делаю скорее для себя.
Пытаюсь решить перебором так, как умею, но ничего не выходит.
При 71 36 8 18 2 12 45 100 100 выдаёт 0, 1, 1 Почему-то хочет одну из точек посетить два раза.. Добавлено через 1 минуту Да и вообще там ответ должен быть 1 0 Добавлено через 3 минуты Добавив между 73 и 74 строкой pro = [], кажется.. Заработало верно ![]() Добавлено через 38 секунд Не знаю, правда, как насчёт производительности всего этого безобразия Добавлено через 11 минут Всё равно неверно работает( 94 58 30 0 3 56 13 41 48 41 45 Выдаёт 0,1,2, но как минимум один путь меньше есть: 120 Добавлено через 22 минуты Там из-за вложенности функций значение переменных меняется сразу везде((
0
|
||||||
|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
|
| 19.11.2021, 13:06 [ТС] | |
|
А по времени примерно сколько? И как всё-таки реализовать?
0
|
|
|
0 / 0 / 0
Регистрация: 17.11.2021
Сообщений: 9
|
|||||||||||
| 20.11.2021, 23:55 [ТС] | |||||||||||
|
Всё пытаюсь решить прямым перебором, но возникла проблема. Решаю рекурсией, при переходе из функции в функцию с глобальным pro_mn творится что-то непонятное, он меняется вместе с локальным pro, как исправить? Не пойму, что с ним не так.
(def funk) Нужно сохранять pro_mn
Более актуальный код:
0
|
|||||||||||
|
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
|
|
| 21.11.2021, 00:45 | |
|
TangerineLeaf, Судя по описанию, ваша задача называется "задачей коммивояжёра". Можете погуглить, есть различные варианты ее решения. На сколько я помню, однозначно точное решение у этой задачи есть, только методом перебора, но оно крайне неэффективно по времени. Но есть и эффективные методы, которые дают результат с приемлемой точностью.
0
|
|
|
Супер-модератор
|
|
| 21.11.2021, 07:52 | |
Сообщение было отмечено TangerineLeaf как решение
Решение
anton78spb, Да это задача коммивояжера по полному графу. Поэтому бэктрекинг здесь выродится в полный перебор. О чем я и писал
1
|
|
|
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
|
|
| 21.11.2021, 10:11 | |
|
Catstail, Именно так. И сложность полного перебора там вроде O(n!).
0
|
|
| 21.11.2021, 10:11 | |
|
Помогаю со студенческими работами здесь
18
Найти кратчайший путь между точками Найти самый кратчайший путь к вершине графа Кратчайший путь в графе Вычислить кратчайший путь Найти кратчайший путь по страницам википедии Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|