773. 滑动谜题

news2024/9/25 19:15:56

 

链接:773. 滑动谜题

题解:https://blog.csdn.net/INGNIGHT/article/details/131350054

滑动拼图 II

class Solution {
public:
    int slidingPuzzle(vector<vector<int>>& board) {
        // 异常判断
        if (board.size() <= 0 || board[0].size() <= 0) {
            return 0;
        }
        int m = board.size();
        int n = board[0].size();
        // 将矩阵归一化为字符串
        std::string begin;
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                begin += (board[i][j] + '0');
            }
        }
        // 终点
        std::string end = "123450";
        // bfs遍历队列
        std::deque<std::string> que;
        que.push_back(begin);
        // 距离起点的距离
        std::unordered_map<std::string, int> distance;
        distance[begin] = 0;
        // 一直遍历到队列为空
        while (!que.empty()) {
            auto f = que.front();
            que.pop_front();
            // 获得从当前0位置可以置换的四周位置
            for (auto& neigh : get_neighbord(m, n, f)) {
                // 如果当前位置遍历过
                if (distance.find(neigh) != distance.end()) {
                    continue;
                }
                // 放入队列
                que.push_back(neigh);
                // 更新距离
                distance[neigh] = distance[f] + 1;
            }
        }
        // 判断是否到达最终点
        return distance.find(end) == distance.end() ? -1 : distance[end];
    }
private:
    std::vector<std::string> get_neighbord(int m, int n, const std::string& node) {
        std::vector<std::string> neighboards;
        // 初始化空间
        neighboards.reserve(4);
        std::vector<std::vector<int>> direction{{0, -1}, {0, 1}, {1, 0}, {-1, 0}};
        // 获得当前空块0的位置
        int index = node.find('0');
        // 转换为所在矩阵中位置
        int row = index / n;
        int col = index % n;
        // 遍历4个方向,或者置换后的字符串
        for (int i = 0; i < direction.size(); ++i) {
            int next_row = row + direction[i][0];
            int next_col = col + direction[i][1];
            // 判断异常边界
            if (next_row < 0 || next_col < 0
                    || next_row >= m || next_col >= n) {
                continue;
            }
            // 计算下一个位置点,置换字符串
            int next_pos = next_row * n + next_col;
            std::string bak = node;
            swap(bak[index], bak[next_pos]);
            // 追加邻居,置换后的字符串
            neighboards.push_back(bak);
        }
        return neighboards;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么管理好一个团队?

一个成功的企业需要一个高效、有能力、积极的团队来支持其业务运营。管理一个团队需要领导者具备一定的技能和知识&#xff0c;怎么管理好一个团队对于许多企业领导者而言也是一项不小的挑战。对此&#xff0c;我想首先推荐一本非常优秀的团队书籍——《经理人参阅&#xff1a;…

js vuejs dagre-d3绘制流程图实用指南 有向图可视化

写在前面 之前有小伙伴问我如何使用 D3 在前端绘制流程图,今天在这里给安排上,与大家分享。 明确一点,只要你的数据计算能力足够强,使用原生D3绘制流程图绝对可以的,但是,为了让大家更容易上手,避免重复造轮子,给大家推荐一个专门绘制流程图的 D3 插件 dagre-d3。 首…

idea tomcat js 汉字乱码

Run/Debug Configuiations->VM options:-Dfile.encodingUTF-8

服务 第七章

目录 1.tomcat 核心组件 2.处理请求&#xff0c;内部数据流向 3.请求处理过程 4.主要目录说明 5.tomcat 优化 6.总结 1.tomcat 核心组件 2.处理请求&#xff0c;内部数据流向 3.请求处理过程 4.主要目录说明 5.tomcat 优化 6.总结 tomcat 属于轻量级应用服务器&#xf…

基于Tars高并发IM系统的设计与实现-基础篇1

基于Tars高并发IM系统的设计与实现–基础篇1 作者简介 兰怀玉 毕业于中央民族大学计算机专业 先后供职国内外多家公司软件研发设计岗位&#xff0c;有丰富的软件研发经验。 从事IM领域设计研发十余年&#xff0c;先后领衔多个IM通讯系统设计与研发发&#xff0c;拥有丰富的IM…

裂墙推荐!阿里大牛新产Java面试速成指南,主打就是躺着拿Ofeer

很多粉丝后台留言&#xff0c;Java程序员面临的竞争太激烈了…… 我自己也有实感&#xff0c;多年身处一线互联网公司&#xff0c;虽没有直面过求职跳槽的残酷&#xff0c;但经常担任技术面试考官&#xff0c;对程序员招聘市场的现状很清楚。导致现在激烈竞争的原因不外乎三方面…

移动端数据可视化设计

在做APP设计的时候&#xff0c;难免会遇到一些需要展示数据的场景。使用传统的表格和文档展示数据不仅难看&#xff0c;也影响用户理解数据的含义。而数据可视化设计能将数据以更加直观的方式展现出来&#xff0c;使数据更加客观、更有说服力。 在移动应用中&#xff0c;数据可…

uview-plus上传图片,upload组件带参数上传

一、引入uview-plus 请自行在项目中引入uview-plus组件库&#xff0c;此处不多赘述 二、使用 html 部分&#xff0c;上传组件的样式自己去定义&#xff0c;不多赘述 <u-upload:fileList"fileList" // 文列列表afterRead"afterRead" // 读取后的…

03双向链表

双向链表 单向链表的缺点 单向链表&#xff0c;只能是一个方向来查找&#xff0c;而双向链表可以向前或者向后查找。单向链表不能自我删除&#xff0c;需要靠辅助结点。而双向链表可以自我删除。所以我们单链表删除结点的时候&#xff0c;总要找到temp&#xff08;待删除结点…

python+requests库使用时报错:ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131)

本人测试小白~第一次用pythonunittestrequest做接口测试的学习时&#xff0c;一直报这个ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1131) 反复检查代码也没有发现什么问题&#xff0c;然后在网上找了很多方法&#xff0c;最终解决这个问题的方法…

BUUCTF 世上无难事 1

题目描述&#xff1a; 以下是某国现任总统外发的一段指令&#xff0c;经过一种奇异的加密方式&#xff0c;毫无规律&#xff0c;看来只能分析了。请将这段语句还原成通顺语句&#xff0c;并从中找到key作为答案提交&#xff0c;答案是32位&#xff0c;包含小写字母。 注意&…

三层交换机实现不同VLAN的数据转发

实验环境&#xff1a; 思科模拟器&#xff0c;Cisco Packet Tracer 实验拓扑&#xff1a; 实验配置&#xff1a; &#xff08;1&#xff09;PC配置 IP子网掩码网关PC1192.168.10.1255.255.255.0192.168.10.254PC2192.168.10.2255.255.255.0192.168.10.254PC3192.168.20.325…

Mybatis - 统计SQL执行时间

由于系统数据量较大&#xff0c;SQL执行十分低效&#xff0c;我们在做数据库优化时&#xff0c;想在日志中看到每个SQL执行的时间&#xff0c;以方便针对性的优化 一、切面编程Aspect 此方案主要是通过环绕切面的方式将mapper包下的接口方法&#xff0c;然后前后计算时间差即…

C语言初阶之结构体

结构体 1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化 2. 结构体成员的访问3. 结构体传参 1. 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。…

小波变换笔记

突然变化的图像或信号 小波变换 高带宽&#xff1f; 放缩和时延 放缩因子和频率成正比 小波在频域中具有带通特性 Cf 中心频率 s 小波刻度 \delta t 采样间隔 时延 我们需要移动小波&#xff0c;以便使其和信号中寻找的特征对齐 时频分析时域频率成分滤波 连续小波变换 C…

【手撕算法|动态规划系列No.3】leetcode746. 使用最小花费爬楼梯

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…

三相电机线电流上的锯齿状高频波形的来源

三相电机的线电流上会叠加有一组锯齿状波形&#xff0c;这里&#xff0c;光标可以看到它的频率&#xff1a;这是40KHz。当前线电流基频大约35 Hz。我们把变频器载波频率切至6.0&#xff0c;小的杂波频率变至60KHz&#xff1a; 所以&#xff0c;这类波形上的一级肉眼可见的杂波是…

时间序列分解 | Matlab经验模态分解(EMD)的信号分解

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列分解 | Matlab经验模态分解(EMD)的信号分解 部分源码 %----------------------

libevent实践09:交叉编译并运行定时器测试

交叉编译 执行命令&#xff1a; ./configure --prefix/big/libevent/libevent-2.1.12-stable/_arm_install --hostarm-linux-gnueabihf CC/arm-gcc/bin/arm-linux-gnueabihf-gcc CXX/arm-gcc/bin/arm-linux-gnueabihf-g --disable-openssl ./configure --prefix/big/libevent/…

GO 多线程工具使用和分析

GO 多线程工具使用和分析 Go 语言中的 sync 包提供了一些用于同步和互斥访问共享资源的原语&#xff0c;使用这些可以避免多个goroutine同时访问共享资源时出现的问题&#xff0c;他们有&#xff1a; 互斥锁读写锁condWaitGroupmaponcepoolatomic 本文介绍它们的使用方式 互…