有些简单的状态可以完全通过参数传递(比如之前达到的和、之前选择的数的数量),此时直接完全使用参数传递状态代码会非常好看。
而有些状态要记录的东西不方便用参数传递(比如八皇后问题的之前的位置状态、全排列问题的之前选择了那些数),此时一般采用全局的数组记录,并在每次搜索子状态前做好标记,搜索子状态结束后取消标记。
有的状态 nxt 明显不合理或无法到达答案,可以加入判断以不进入这些搜索分支,即在搜索树上剪掉了分支。
因为多维数组迷宫实际上是一个图上的搜索,所以情况比起搜索树的结构略有不同。
如果只需要判断是否能到达,直接不走重复的点即可,此时时间复杂度仍然是有多少可能的状态就是多少(因为每个状态只走了一次)。
如果要找到最短路径。那么可以记录目前到每个点的最短路径(dis),如果当前到下一个位置的路径长度更优才走到下一个位置并更新答案。此时因为每个点会走多次,所以时间复杂度不太好估算,但一般显著的比广搜做法慢得多(广搜做法在无权图上第一次到达每个点时就是最短路径了,所以可以每个点都只访问一次)。如果想要达到与广搜级别的时间效率,可以使用迭代加深搜索。