BFS 算法秒杀数字华容道

773. 滑动谜题

本篇文章介绍如何用「BFS」解决数字华容道问题,详情可见 滑动谜题

这个题目还算友好,规模是固定的 2 x 3

对于这种计算最小步数的问题,我们就要敏感地想到 BFS 算法,这里再列举几个题目:打开转盘锁最小基因变化 都可以看作求最小步数的问题,均是使用 BFS

关于 BFS 框架的详细总结可见 BFS 算法框架

关于「最小基因变化」的题解可见 浅析:最小基因变化

 

我们需要搞清楚,每次可以做的选择是什么?如下图所示,对于这种情况,可以有三种选择:

10

我们的的终点是什么:

13

现在的问题是,如何才可以把二维数组转换成更好处理的形式 -> 字符串

首先我们肯定需要把二维数组拉平,如下图所示:

14

拉平后,如何找到每次可做的选择呢?

15

对于上图,下标为 4 的位置,可做的选择为[1, 3, 5]

由于规模是固定的,所以可以手动计算出拉平后每个位置的选择

(PS:居然现在才知道二维数组中一维的大小可以不同,一直以为必须相同)

下面给出完整代码: