通常情况下,您希望以最小的成本从A到B,但除了费用之外的每个链接都有一些您可以购买/收集的项目。
不是真正的口袋妖怪玩家,但是使用主题来更好地解释它,你想从家到健身房,并沿着最短的路线在路上找到每件物品中的至少一件。
我可以用A *解决最短路径。如何包含附加限制,还是应该使用其他算法?
我在考虑使用起始成本,因此当您找到物品时可以降低成本,当您旅行时,您会增加成本。并尝试接近0。
我正在考虑的其他选项是尝试找到涵盖所有项目的路径。然后在该子集中使用A *。但不确定哪种算法可以解决这个问题。
答案 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
距离很远。