最优解迷宫问题理论上的最大复杂度应为
O(4mn)。对于较大的数据范围,考虑在步数过多时返回当前找到的解(或无解):
if(steps>1e8)return;
但是,这种方法是存在缺陷的,例如对于这个数据:
8 8
########
########
########
########
S#######
########
########
#######E \ 假定从S开始,走到#就可以拿到1积分,终点为E,显然螺旋地走可以拿到所有积分,但是该方法不能得到最优解,如果限制步数过大会超时,失去了它原本的意义。
比如本人和几个同学,一直在尝试https://www.luogu.com.cn/problem/U180518
但是,在我们构造出的极端数据下,根本就不能通过。
搜索算法对于这个问题效率低下的根本原因,在于大量的无用搜索分支。为此,我们尝试过二分答案、搜索是否联通、预处理能否到达等情况,但是这些方法只能对特定的数据有优化作用。
尽管复杂度上界很高,我坚信存在一种方法可以大大减少搜索尝试,一种复杂的剪枝,使得这个问题得到高效地解决(差不多能够在1秒内算出20×20还请各位大佬各抒己见。