假设我有一个节点图(网络),权重如下: 1.在两个节点之间的链路上单向行驶 2.以另一种方式在两个节点之间的链路上行进(这些可能是不同的)。 3.从一个链接转换到另一个链接。
此外,有些节点只是单向的。
在这种情况下,最佳算法是: a)找到最小生成树 b)找到两个节点之间的最短路径 c)找到“旅行推销员”路径(即到处都是最短的路线,最小重复)?
另外,最好将双向物体视为两条单向路径,而不是每个方向具有不同权重的双向路径?
---一个例子---
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
其中&lt; 2/3&gt;表示左侧行驶2次,右侧行驶3次。 ^ 1/4表示1个旅行,4个旅行。两个链接之间的单个数字是更改链接的成本 - 例如从AD到DF的成本为8,从AB到BE的成本为2.
希望有道理......
西蒙
(p.s道歉不好的术语 - “链接”,“边缘” - 无论你喜欢什么;)
为了更好地解释加权类型,想象边缘是火车轨道,节点是站点。边缘的成本是两个站之间列车的行程时间,节点上的成本是交换时间的长度(即使在同一节点,也可能在边缘之间变化,具体取决于平台的距离,服务的规律性等等。
答案 0 :(得分:3)
是的,将它们视为两条边而不是一条边。然后你可以在没有问题的情况下使用传统的图论算法,特别是如果你总是保证每个方向都有权重。如果您只是使用像我刚刚帮助您创建的“普通”图表,则很容易找到这些算法。
您可以使用Dijkstra's作为最短路径。
您可以Prim's获取最小生成树。
你可以谷歌为非对称TSP尝试找到一个算法,我很确定算法简介也有相关的东西。对不起,我找不到适合你的那个好的实现。关于非对称TSP,这里也有一些很好的问题,现在您知道它被称为非对称TSP。
祝你好运!我喜欢图论。-Brian J. Stinar -
答案 1 :(得分:2)
对于你的“交换”权重,你可以制作一个小子图来编码它们。例如,您有:
|
|3
8 D --
|2
|
您可以使用边上的权重对其进行编码,如下所示:
|
|
D0
| \3
| \
8| D2--
| /
| /2
D1
|
|
请注意,您不必使用8边缘从D0到D1,因为您可以转到D0-> D2-> D1,而重量为5。我不确定你的原始配方是否允许这样做。