给出一个$𝑛×𝑚$的网格,给出起始点,要求向左走不超过𝐿步,向右走不超过𝑅步,求出能遍历到哪些点。
$01BFS$模版题。
直接$bfs$会出现问题,因为一旦打上标记后,下一次无法访问到,但是下一次的状态还更优。
但是由于上下走最好,边权就相当于$0$.
$0-1BFS$用来解决:边权值为$0$或$1$,或者能够转化为这种边权值的最短路问题,时间复杂度为$O(E+V)$.
$0-1BFS$,从队列$front$中去除点$u$,遍历$u$的所有边,如果当前边可以进行$relax$操作,则$relax$,然后判断$level$,若$level$相同,放到队列的$front$,否则,放到$back$,队列采用双端队列$deque$。
代码
1 |
|