[NOIP2013]华容道 首先是一种比较显然的做法。 整个棋盘,除了起点,终点和空格,其他的方块是等价的。 对于终点,它始终不会变化,如果搜到终点结束搜索即可,所以我们不需要考虑终点。 所以需要考虑的是空格的位置和起点方块的位置。 定义$f(i1,j1,i2,j2)$为 空格所在坐标$(i1,j1)$ 起点坐标$(i2,j2)$。 对于每一步,可以移动空格周围的一个可移动棋子,将它与空格位置交换。其实等价于空格移动到和空格相邻的棋子。如果该棋子是起点,则将起点更新到原来空格的坐标。 使用bfs,每次步数加一,队列内的状态步数满足单调,第一次得到(区别于dijkstra,不是...