ABC246E Bishop 2 Solution

更好的阅读体验戳此进入

题面

给定有障碍的网格图,. 为空地,# 为障碍。给定起点终点,每次移动仅可以斜向走任意长度,问从起点到终点的最少移动次数,可能无解,无解输出 -1

Solution

BFS 较为显然,因为时限 6000ms,只要写的不太丑直接搜也能过。对于本题,使用 01BFS 较为显然。我们在宽搜每次搜一步且距离仅为 1,并记录上一步的方向,如果同向则认为走了一个 0 边,异向则为 1 边,开个双端队列,同向插到前面,反之插到后面,按照正常宽搜每次取队头扩展即可。

需要注意对于 01BFS 时,我们判断是否走过和是否为答案的时候,需要在从队头取元素的时候判断,而不是在扩展的时候判断。因为如果在某一次由 1 扩展的时候如果直接把 vis 设为 true,但是这可能会导致后面从 0 扩展的,本应能插在队列中比这个更前面的更优的无法转移,使答案更劣。同时我们也需要考虑到不同方向的时候扩展也是不同,所以 vis 中也要考虑到方向这一维。

Code

UPD

update-2022_10_21 初稿