@ninijia 在 Leetcode每日一题练习 ------ 773. 滑动谜题 中发帖
从Leetcode 每日一题练习继续讨论:
773. 滑动谜题
773. Sliding Puzzle
题解
本题是一道难题,可以将其视为一个搜索问题,但这种搜索问题正因非常经典从而非常难。类似这种问题比较出名的场景是围棋,但围棋的棋子是属于不同方的,因此在构建棋盘状态时除了棋子自身的位置还要加上棋子的归属这一属性,而本题相对简化,不存在这个问题,相当于每个棋子仅有数字作为自身的属性。最终搜索的目标也是固定的状态。
则可以一边构造出状态树一边搜索,状态树中每个节点是棋盘当前的布局,边表示边相连的节点可以通过一次0的移动互相转换。通过广度优先搜索不断遍历树的每一层,直到找到目标节点,此时遍历的深度即为需要的移动步数,而若全部遍历完后仍未达到目标状态,则返回-1。
难点在于,在展开这棵状态树时,我们不想让底层的节点重复已经构造过的状态节点,如何记录已经构造过的状态节点呢,可以将棋盘上...