Leetcode之广度优先搜索(BFS)专题-773. 滑动谜题(Sliding Puzzle)

BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tree Level Order Traversal)

相同思路的题目:Leetcode之广度优先搜索(BFS)专题-752. 打开转盘锁(Open the Lock)

相同思路的题目2:Leetcode之广度优先搜索(BFS)专题-127. 单词接龙(Word Ladder)


在一个 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] 的排列.

0每次只能和他的上下左右交换,利用一个vis数组,参考相似题目思路,求解题目。

相同思路的题目:Leetcode之广度优先搜索(BFS)专题-752. 打开转盘锁(Open the Lock)

相同思路的题目2:Leetcode之广度优先搜索(BFS)专题-127. 单词接龙(Word Ladder)

本题AC代码:

class Solution {
int[] dirx = {1, -1, 0, 0};
int[] diry = {0, 0, 1, -1}; private static class POINT {
int x, y;
int step;
int[][] board; POINT(int x, int y, int step, int[][] board) {
this.x = x;
this.y = y;
this.step = step;
this.board = board;
}
} public int slidingPuzzle(int[][] board) {
int m = 2;
int n = 3;
Set<String> vis = new HashSet<>();
Queue<POINT> queue = new LinkedList<>();
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (board[i][j] == 0) {
vis.add(board[0][0] + " " + board[0][1] + " " + board[0][2] + " " + board[1][0] + " " + board[1][1] + " " + board[1][2]);
queue.offer(new POINT(i, j, 0, board)); }
}
}
while (!queue.isEmpty()) {
POINT temp = queue.poll();
int x = temp.x;
int y = temp.y;
int step = temp.step;
int[][] map = temp.board;
if (map[0][0] == 1 && map[0][1] == 2 && map[0][2] == 3 && map[1][0] == 4 && map[1][1] == 5 && map[1][2] == 0) {
return step;
}
for (int i = 0; i < 4; i++) {
int[][] cloneMap = new int[m][n];
for (int a = 0; a < m; a++) {
System.arraycopy(map[a], 0, cloneMap[a], 0, n);
}
int xx = x + dirx[i];
int yy = y + diry[i];
if (xx >= 0 && yy >= 0 && xx < m && yy < n) {
cloneMap[x][y] = cloneMap[xx][yy];
cloneMap[xx][yy] = 0;
String str = cloneMap[0][0] + " " + cloneMap[0][1] + " " + cloneMap[0][2] + " " + cloneMap[1][0] + " " + cloneMap[1][1] + " " + cloneMap[1][2];
if (!vis.contains(str)) {
vis.add(str);
queue.offer(new POINT(xx, yy, step + 1, cloneMap));
}
}
}
} return -1;
}
}

Leetcode之广度优先搜索(BFS)专题-773. 滑动谜题(Sliding Puzzle)的更多相关文章

  1. [Swift]LeetCode773. 滑动谜题 | Sliding Puzzle

    On a 2x3 board, there are 5 tiles represented by the integers 1 through 5, and an empty square repre ...

  2. Leetcode之广度优先搜索(BFS)专题-详解429. N叉树的层序遍历(N-ary Tree Level Order Traversal)

    Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tree Level Order Traversal) 给定一个 N 叉树,返回其节点值的层序遍历. (即从左到右 ...

  3. Leetcode之广度优先搜索(BFS)专题-127. 单词接龙(Word Ladder)

    Leetcode之广度优先搜索(BFS)专题-127. 单词接龙(Word Ladder) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  4. Leetcode之广度优先搜索(BFS)专题-752. 打开转盘锁(Open the Lock)

    Leetcode之广度优先搜索(BFS)专题-752. 打开转盘锁(Open the Lock) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary ...

  5. Leetcode之广度优先搜索(BFS)专题-1162. 地图分析(As Far from Land as Possible)

    Leetcode之广度优先搜索(BFS)专题-1162. 地图分析(As Far from Land as Possible) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. ...

  6. Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges)

    Leetcode之广度优先搜索(BFS)专题-994. 腐烂的橘子(Rotting Oranges) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  7. Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares)

    Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  8. Leetcode之广度优先搜索(BFS)专题-133. 克隆图(Clone Graph)

    Leetcode之广度优先搜索(BFS)专题-133. 克隆图(Clone Graph) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tree ...

  9. Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

随机推荐

  1. 水果商城 ( Iview+ SSM + MySQL )

    因为时间原因,只做了后台,前台本来是打算使用 uni 框架 的. 有文档.E-R流程图.数据库文件. 项目源码地址:https://github.com/oukele/MyProject-Two

  2. gtid同步异常处理

    gtid同步异常处理 分析出现问题时候GTID值 通过分析法获取gtid值 通过查看mysql> show slave status \G;查看一下信息并记录下来:Retrieved_Gtid_ ...

  3. 【JZOJ5605】【NOI2018模拟3.26】Arg

    题目描述 给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. 解题思路 如何求出一个序列的LIS? 对于二分的方法,每次插入一个数,将它放到第一个 ...

  4. js 获取对应的url参数

    举例:http://localhost:5000/?sss=sdf&fdd=123 1.设置或获取整个 URL 为字符串 window.location.href 值:  http://loc ...

  5. What is Double 11 in China? Is it a famous festival?

    "1" means single, 11th, November is quadruple single!! What a tragedy for those single you ...

  6. V2018.5 MB SD C4功能和软件详细信息更新

    MB SD C4 现在更新为V2018.5版本.功能和HDD Xentry软件信息如下: V2018.5 MB SD C4 功能: 支持无线诊断: 支持K线诊断,CAN BUS和UDS诊断协议.(旧的 ...

  7. 2018 焦作网络赛 K Transport Ship ( 二进制优化 01 背包 )

    题目链接 题意 : 给出若干个物品的数量和单个的重量.问你能不能刚好组成总重 S 分析 : 由于物品过多.想到二进制优化 其实这篇博客就是存个二进制优化的写法 关于二进制优化的详情.百度一下有更多资料 ...

  8. python socket.io 坑。

    python下star最高的是https://github.com/miguelgrinberg/python-socketio 是flask作者写的.client server都有了,而且还提供了a ...

  9. JavaWeb-SpringSecurity实现需求-判断请求是否以html结尾

    系列博文 项目已上传至guthub 传送门 JavaWeb-SpringSecurity初认识 传送门 JavaWeb-SpringSecurity在数据库中查询登陆用户 传送门 JavaWeb-Sp ...

  10. Android学习_Selector

    Selector 实现组件在不同状态下不同的文字颜色.背景颜色或图片的切换,使用十分方便. 1. 创建方法 第一种:在XML中直接创建selector的XML文件,容易掌握,简单但是不灵活,较为常用. ...