Скажем, у меня есть граф (сеть) узлов со следующими весовыми коэффициентами: 1. путешествие в одну сторону по звену между двумя узлами. 2. Путешествие в обратном направлении по звену между двумя узлами (они могут быть разными). 3. переход с одной ссылки на другую.
Кроме того, некоторые узлы являются односторонними.
В этом случае, каковы были бы лучшие алгоритмы для: а) поиска минимального остовного дерева б) поиска кратчайшего маршрута между двумя узлами в) поиска пути «коммивояжера» (т.е. кратчайшего маршрута, который идет везде, с минимальным дублированием) ?
Кроме того, было бы лучше рассматривать двунаправленную вещь как два однонаправленных пути, а не как двунаправленный путь с разными весовыми коэффициентами в каждом направлении?
---пример---
3
A --<2/3>-- B --<3/2>-- C
| 1 2|3
| |
^1/4 ^4/3
| |
|3 4|
8 D --<3/5>-- E
|2
|
1 ^3/1
|
|
F
Где ‹2/3> означает вес 2, движущихся влево и 3, движущихся вправо. ^1/4 означает, что 1 движется вверх, а 4 — вниз. Одно число между двумя ссылками — это стоимость смены ссылок — например, переход с AD на DF стоит 8, а с AB на BE — 2.
Надеюсь, это имеет смысл...
Саймон
(p.s. извините за неправильную терминологию - "ссылки", "ребра" - как хотите ;))
Чтобы лучше объяснить типы взвешивания, представьте, что ребра — это железнодорожные пути, а узлы — станции. Стоимость на границе — это время в пути на поезде между двумя станциями, а стоимость на узлах — это продолжительность времени пересадки (которое может различаться между ребрами даже в одном и том же узле, в зависимости от того, как далеко находится платформа, насколько регулярно обслуживание и т. д.).