什么A *变体包括额外的限制

时间:2016-08-16 21:02:50

标签: algorithm shortest-path a-star traveling-salesman

通常情况下,您希望以最小的成本从A到B,但除了费用之外的每个链接都有一些您可以购买/收集的项目。

不是真正的口袋妖怪玩家,但是使用主题来更好地解释它,你想从家到健身房,并沿着最短的路线在路上找到每件物品中的至少一件。

enter image description here

我可以用A *解决最短路径。如何包含附加限制,还是应该使用其他算法?

我在考虑使用起始成本,因此当您找到物品时可以降低成本,当您旅行时,您会增加成本。并尝试接近0。

我正在考虑的其他选项是尝试找到涵盖所有项目的路径。然后在该子集中使用A *。但不确定哪种算法可以解决这个问题。

1 个答案:

答案 0 :(得分:-1)

我会使用BFS。通常,您将节点标记为已访问,以便每个节点仅访问一次。但是对于这个问题,你需要跟踪找到的物品和行进的距离。因此,可以多次访问每个节点,具有不同的项目集。

使用您的示例,我们可以为项目分配标签

A for 200 poke balls
B for lure module
C for incense
D for egg

和节点

S for the start node
T for the top node
M for the middle node
L for the lowest node
Z for the end node

假设所有路径的成本相等,且成本为1。

问题从{S::0}开始,意味着节点S没有项目和0距离。然后,您可以对{T:C:1}{M:A:1}{L:BD:1}进行排队。

{T:C:1}开始,您将{S:C:2}{M:BC:2}{Z:BCD:2}排队。

从队列中提取{S:C:2}时,您会注意到节点T已经有距离为1的项目C,因此您队列{T:C:3}。但您会将{M:AC:3}{L:BCD:3}排队。

最终你会找到{Z:ABCD:n},其中n距离很远。