【题目】**773. 滑动谜题

在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示.

一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换.

最终当板 board 的结果是 [[1,2,3],[4,5,0]] 谜板被解开。

给出一个谜板的初始状态,返回最少可以通过多少次移动解开谜板,如果不能解开谜板,则返回 -1 。

示例:

输入:board = [[1,2,3],[4,0,5]]
输出:1
解释:交换 0 和 5 ,1 步完成输入:board = [[1,2,3],[5,4,0]]
输出:-1
解释:没有办法完成谜板输入:board = [[4,1,2],[5,0,3]]
输出:5
解释:
最少完成谜板的最少移动次数是 5 ,
一种移动路径:
尚未移动: [[4,1,2],[5,0,3]]
移动 1 次: [[4,1,2],[0,5,3]]
移动 2 次: [[0,1,2],[4,5,3]]
移动 3 次: [[1,0,2],[4,5,3]]
移动 4 次: [[1,2,0],[4,5,3]]
移动 5 次: [[1,2,3],[4,5,0]]输入:board = [[3,2,4],[1,5,0]]
输出:14

提示:
board 是一个如上所述的 2 x 3 的数组.
board[i][j] 是一个 [0, 1, 2, 3, 4, 5] 的排列.

【解题思路1】找0交换相邻的 BFS

class Solution {int[][] neighbours = {{1, 3}, {0, 2, 4}, {1, 5}, {0, 4}, {1, 3, 5}, {2, 4}};public int slidingPuzzle(int[][] board) {// 转码为字符串StringBuffer sb = new StringBuffer();for (int i = 0; i < board.length; i++) {for (int temp : board[i]) {sb.append(temp);}}String initial = sb.toString();// 已经是最终解if ("123450".equals(initial)) {return 0;}int step = 0;Queue<String> queue = new LinkedList<String>();queue.offer(initial);Set<String> set = new HashSet<String>();set.add(initial);while (!queue.isEmpty()) {step++;int size = queue.size();for (int i = 0; i < size; i++) {String current = queue.poll();// 枚举当前字符串通过和"0"交换产生的所有情况for (String next : getNext(current)) {if (!set.contains(next)) { // 去重if (next.equals("123450")) {return step;} else {queue.offer(next);set.add(next);}}}}}return -1;}public List<String> getNext(String current) {List<String> list = new ArrayList<String>();char[] cur = current.toCharArray();int x = current.indexOf('0');for (int y : neighbours[x]) {swap(cur, x, y);list.add(new String(cur));swap(cur, x, y); // 复原}return list;}public void swap(char[] array, int x, int y) {char temp = array[x];array[x] = array[y];array[y] = temp;}
}

leetcode **773. 滑动谜题(拼图)(2021.6.26)相关推荐

  1. Leetcode 773. 滑动谜题 C++

    Leetcode 773. 滑动谜题 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上 ...

  2. LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)

    1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 b ...

  3. leetcode 773. 滑动谜题

    题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 boar ...

  4. Leetcode刷题 2021.02.26

    Leetcode刷题 2021.02.26 Leetcode1178 猜字谜 Leetcode869 重新排序得到 2 的幂 Leetcode1676 二叉树的最近公共祖先 IV Leetcode11 ...

  5. 力扣--- 滑动谜题

    力扣- 滑动谜题 文章目录 力扣--- 滑动谜题 一.题目描述 二.问题分析 三.代码 一.题目描述 二.问题分析 对于这种计算 最小步数的问题,我们就要敏感地想到 BFS 算法. 这个题目转化成 B ...

  6. html四张图片拼图,js实现html滑动图片拼图验证

    本文实例为大家分享了js实现html滑动图片拼图验证的具体代码,供大家参考,具体内容如下 html: Document 向右滑动验证 css: *{ margin: 0; padding: 0; } ...

  7. 前端面试题笔记 2021.8.26

    2021.8.26学习笔记 如果需要匹配包含文本的元素,用下面哪种方法来实现? A. text() B. contains() C. input() D. attr(name) 正确答案: B tex ...

  8. 2021.1.26课程摘要(逻辑教育-王劲胜)

    2021.1.26课程摘要 逻辑教育-13期-Python基础班-王劲胜 一.循环控制 二.列表 三.99乘法表 四.作业讲解 逻辑教育-13期-Python基础班-王劲胜 一.循环控制 1.brea ...

  9. 【题解报告】ZJNU综合训练(2021.1.26)

    [题解报告]ZJNU综合训练(2021.1.26) B C D F H I J M 综合训练 ZJNU综合训练(2021.1.26) B:DP+搜索 | CF 1057C C:组合数学+dp | CF ...

  10. 太原理工大学软件学院数据库实验四(2021.4.26)

    太原理工大学软件学院数据库实验四(2021.4.26) -- (1)创建Student 表 CREATE TABLE Student ( Sno CHAR(8) PRIMARY KEY, Sname ...

最新文章

  1. ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了
  2. java todo error_java.sql.SQLException: sql injection violation, syntax error: TODO UNIQUE unique
  3. 微信小程序运行的底层逻辑
  4. [tp3.2.1]让默认页面: 加载Home模块的Index控制器;而让admin.php默认去加载Admin模块的Adminc控制器....
  5. php 如何去除说有空格,php怎么去除所有空格
  6. 2021年全国各行业统计年鉴整理
  7. 电脑端输入法的一些设置
  8. 管理者必须要精通的六项管理技能
  9. 硬件科普系列之内存篇
  10. h5php大转盘抽奖,微信公众号H5抽奖幸运大转盘,PHP带后端,微信抽奖大转盘源码可以独立使用...
  11. C#顺时针逆时针旋转图片
  12. c语言打气球游戏,打气球程序求修改
  13. LSL-- Flow Control
  14. 偶尔也需要强烈的孤独
  15. apache评分条件_APACHE Ⅲ 评分标准.doc
  16. 关于EOSUNION 的商业创业大赛的一点心得
  17. Linux修改密码提示鉴定令牌操作错误
  18. 数学建模——五步建模法
  19. 【Pyecharts | Map3D】带光影效果的3D地图 | 深圳地区二手房房价地图~
  20. stm32与GPS模块的数据传输,最后把数据传回到电脑上

热门文章

  1. 看看月明光彩照入东 水浒
  2. 争夺智能化船票:如何迈出第一步 ——访百度主任科学家 毕然
  3. 高级语言 和 低级语言 的区别
  4. [滴水石穿]poj 1007-DNA Sorting 结题报告【1】
  5. 未来软件是什么样子?
  6. 第015讲: 跟王家林学习从1000个代码案例中学习人工智能和大数据实战第015讲:Scala中Tuple源码剖析及代码实践
  7. python mp3转wav_python 录音,WAV转MP3
  8. wav转mp3怎么转?
  9. Google DFP广告管理系统简介:开始与您的网站进行广告集成
  10. 2022云管云网大会丨阿里云孙成浩:构建万物互联的智能云网络