当前位置: 首页 > news >正文

LeetCode:773. 滑动谜题

class Solution {

public:

    int slidingPuzzle(vector<vector<int>>& board) {

        string target="123450";

        string start="";

        for(int i=0;i<board.size();i++){

            for(int j=0;j<board[0].size();j++){

                start=start+to_string(board[i][j]);

            }

        }

        //开始BFS算法

        unordered_set<string>visited;

        queue<string>q;

        //从起点开始搜索

        q.push(start);

        visited.insert(start);

        int step=0;

        while(!q.empty()){

            int sz=q.size();

            for(int i=0;i<sz;i++){

                string cur=q.front();

                q.pop();

                //判断是否达到目标

                if(target==cur){

                    return step;

                }

                //将数字0和周围数字交换位置

                for(string neighborBoard:getNeighbors(cur)){

                    //防止走回头路

                    if(!visited.count(neighborBoard)){

                        q.push(neighborBoard);

                        visited.insert(neighborBoard);

                    }

                }

            }

            step++;

        }

        return -1;

    }

    vector<string>getNeighbors(string board){

        vector<vector<int>>mapping={

            {1,3},

            {0,4,2},

            {1,5},

            {0,4},

            {3,1,5},

            {4,2}

        };

        int idx=board.find('0');

        vector<string>neighbors;

        for(int adj:mapping[idx]){

            string new_board=swap(board,idx,adj);

            neighbors.push_back(new_board);

        }

        return neighbors;

    }

    string swap(string board, int i, int j){

        char tmp=board[i];

        board[i]=board[j];

        board[j]=tmp;

        return board;

    }

};

http://www.dtcms.com/a/532095.html

相关文章:

  • MATLAB基于类别加权灰靶决策的教学评价研究
  • C16可变参数模板函数和普通函数模板
  • 网站建设规划设计方案建设部门电工证查询网站
  • ​​lseek​​的“时空跳跃”:从获取大小到制造“文件空洞”
  • 技术演进中的开发沉思-151 java-servlet:会话管理
  • 【IO多路转接】IO 多路复用之 select:从接口解析到服务器实战
  • 淄博周村学校网站建设定制wordpress文章和页面
  • Multitouch for mac 触控板多点手势创建
  • SIGCHLD:进程终止与僵尸进程清理的关键
  • 数据结构(10)
  • 南皮做网站的团队管理的七个要点
  • Mysql的数据备份和高可用
  • 【Kotlin】数组集合常用扩展函数
  • css新增盒子属性——尺寸调节
  • 做阿里国际网站会有成效吗上海网站建设公司招人
  • 【课堂笔记】概率论-3
  • 【硬件基础篇】:CPU如何被制造出来
  • 面向模块的综合技术之控制集优化(七)
  • 做网站广告软件网站系统设计目标
  • 使用稀疏采样方法减轻汽车雷达干扰——论文阅读
  • 阮一峰《TypeScript 教程》学习笔记——d.ts 类型声明文件
  • Spring AOP:横切关注点的优雅解决方案
  • 如何申请网站空间和注册域名鞋子软文推广300字
  • 基于AutoDL远端服务器在pycharm复现:具身智能论文pai0
  • 如何看访问网站的dns网站开发难不难
  • 数据结构·堆
  • 阮一峰《TypeScript 教程》学习笔记——类型映射
  • 需要做网站建设和推广网站地图插件
  • PyCharm 设置 Tabs and Indents
  • Spring Boot3零基础教程,生命周期监听,自定义监听器,笔记59