思路:bfs穷举所有的状态转移
过程:建立队列、哈希表;将start放入队列;状态转移直到end或者队列为空;step++,结果返回start

class Solution {public:struct state{string s;int i;state()=default;state(string s_,int i_):s{s_},i{i_}{};bool operator==(state s){return this->s==s.s;}};vector<vector<int>> neighbor{{1,3},{0,2,4},{1,5},{0,4},{1,3,5},{2,4}};int slidingPuzzle(vector<vector<int>>& board) {state start;state end{"123450",5};for(int i=0;i<board.size();i++)for(int j=0;j<board[i].size();j++){if(board[i][j]==0) start.i=i*3+j;start.s+=board[i][j]+'0';}unordered_map<string,int> memo;queue<state> q;q.push(start);memo[start.s]=1;int step=0;while(!q.empty()){int size=q.size();for(;size>0;size--){state cur=q.front();if(cur==end) return step;q.pop();cout<<cur.s<<" "<<cur.i<<endl;;for(int i=0;i<neighbor[cur.i].size();i++){state temp=cur;char ch=temp.s[neighbor[temp.i][i]];temp.s[neighbor[temp.i][i]]=temp.s[temp.i];temp.s[temp.i]=ch;temp.i=neighbor[temp.i][i];if(memo.find(temp.s)==memo.end()){q.push(temp);memo[temp.s]=1;}}}step++;}return -1;}
};

leetcode-773. 滑动谜题相关推荐

  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. 力扣--- 滑动谜题

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

  5. Leetcode双指针滑动窗口相关题目

    滑动窗口 滑动窗口解决哪种问题? 滑动窗口解决给定两个字符串S和T,问你S中是否存在一个子串,包含T中的所有字符并且不含有其他字符. 窗口右指针向右移动,窗口增大,直到满足条件,这时候找到可行解. 窗 ...

  6. LeetCode Hot100 ---- 滑动窗口专题

    什么是滑动窗口? 其实就是一个队列,比如题中的 abcabcbb找出其中不含有重复字符的 最长子串 的长度,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满 ...

  7. LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)

    1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

  8. LeetCode 239. 滑动窗口最大值(双端队列+单调栈)

    文章目录 1. 题目信息 2. 解题 2.1 暴力法 2.2 双端队列法 1. 题目信息 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内 ...

  9. LeetCode 239:滑动窗口最大值 思考分析

    给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 进阶: 你能在线性 ...

  10. leetcode 480. 滑动窗口中位数(堆+滑动窗口)

    中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2 ...

最新文章

  1. centos7 中搭建gitlab
  2. 怎么样重装系统后能使电脑更快?
  3. 锁的释放流程-ReentrantLock.tryRelease
  4. ffmpeg 过程分析
  5. C#关键字的个人理解与注释
  6. java swing简介
  7. 51nod-1065:最小正子段和
  8. 为什么我们要使用图嵌入?
  9. 程序员最爱的 10 个在线社区,你去过几个?
  10. vue-awsome-swiper安装和css引入问题
  11. 企业邮箱服务器如何设置?
  12. 漫步微积分二十二——微分方程和分离变量法
  13. 小小的蜗牛有大大的梦想
  14. 北京邮电大学计算机学院马华东,马华东(博导)
  15. java learn 日期
  16. 要访问1KB的内存为啥需要10位地址线,而不是13位?
  17. Runtime.availableProcessors()
  18. Chrom谷歌浏览器配置vue插件
  19. 安卓性能优化(响应优化)
  20. python日期工具datedays

热门文章

  1. 人到中年找不到工作,创业没方向,该怎么办才好?
  2. 自然语言处理从零到入门 文本挖掘
  3. html中li能做浮动吗,css浮动规则
  4. mysql数据库技巧_MySQL数据库常用操作和技巧
  5. hive中的lateral view 与 explode函数的使用
  6. 著名民通歌唱家拉齐迎新推歌颂祖国新曲《东方巨龙》
  7. OneDrive无法在线访问的间接解决办法
  8. 数据库1:数据库、DDL数据库定义语言、DML操作数据库语言、DQL条件查询语句
  9. 边缘检测系列3:【HED】 Holistically-Nested 边缘检测
  10. icheck插件的使用