考虑以下(有限)地图:
P░b▓░░░░G
░░░a░░░░░
░░░▓▓▓▓▓▓
░░░B░A░░░
░░░░░░░░░
其中P
和G
分别是玩家和目标。 a
和b
是可以通过按开关A
和B
打开(转为可步行节点)的大门。只能使用一个开关。 ░
是可步行节点,▓
是墙。
你会如何解决这个问题?显然简单的启发式(A *)不会,因为你必须决定使用哪个开关。我唯一的解决方案就是强行完成整个过程 - 递归尝试每一条路径和方法。沿着它的每个开关(只要之前没有使用过开关)。这是有效的,但正如我之前提到的,它的蛮力意味着时间的复杂性是巨大的。
问题是:其他算法可以做得更好吗?如果是这样,它看起来如何?
(我试图搜索相关问题,但没有发现任何内容。抱歉,如果这可能是重复的话。)
答案 0 :(得分:0)
如果在此过程中只能使用一个开关,则可以在O(W*H)
中解决问题。
从P
位置开始 BFS ,之后如果达到G
则完成,否则每个门(k
) - 切换( K
)你到了,从k
位置继续 BFS (当然,你不能通过任何其他门)。
继续此过程,直至到达G
或处理每个门。请注意,您必须仅处理第一个 DFS (从P
开始)到达的门,而不是门的 DFS 和任何门{ {1}}可以在相应的 BFS 中移动,而不是在其他 BFS 中。
由于所有职位最多访问一次,因此时间复杂度为k
。