力扣773. 滑动谜题(BFS)

news2025/1/4 9:29:47

Problem: 773. 滑动谜题

文章目录

  • 题目描述
  • 思路
  • 解题方法
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

思路

由于题目提到最小步数,则可以使用BFS来穷举出最小的结果

1.转换为BFS问题:由于0代表空着的可以移动的位置,所以我们只需要从当前位置和0的相邻位置移动从而转换出其它的可能的状态(这样也在逻辑上构成了一棵多叉树
2.压缩二维数组,并标记出相邻索引:我们可以将二维数组board压缩,当在BFS遍历查找时找到一种状态等于压缩后的情况时,我们则立即返回此时的步数;但是我们为了解决相邻索引的问题,需要直接将这个映射写出来:在一维字符串中,索引i在二维数组中的的相邻索引为neighbor[i]
image.png

解题方法

1.将题目所给的初始board压缩为字符串;
2.记录一维字符串的相邻索引(如下代码;按顺势针);
3.BFS框架书写:

3.1.用一个无序表记录已经走过的状态(防止重复甚至出现死循环);
3.2每次取出当前的状态,并匹配是否和目标target一致,一致则返回所需的步数(步数用一个变量step记录);
3.3.每次找到当前数字0的索引并与其相邻的数字交换位置,同时要在无序表中判断是否已经存在;

复杂度

时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution {
public:
    /**
     * BFS
     * 
     * @param board Given array
     * @return int
     */
    int slidingPuzzle(vector<vector<int>> &board) {
        int row = 2;
        int col = 3;
        string start = "";
        string target = "123450";
        // Converts the 2x3 array to a string
        for (int i = 0; i < row; ++i) {
            for (int j = 0; j < col; ++j) {
                start.push_back(board[i][j] + '0');
            }
        }
        // Records the adjacent index of a one-dimensional string
        vector<vector<int>> neighbor = {
                {1, 3},
                {0, 4, 2},
                {1, 5},
                {0, 4},
                {3, 1, 5},
                {4, 2}
        };
        //BFS
        queue <string> q;
        unordered_set<string> visited;
        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();
                // Determine whether the target situation has been reached
                if (target == cur) {
                    return step;
                }
                // Find the index of the number 0
                int index = 0;
                for (; cur[index] != '0'; ++index);
                // Switch the position of the digit 0 or any adjacent digit
                for (int adj: neighbor[index]) {
                    string new_board = cur;
                    swap(new_board[adj], new_board[index]);
                    // Prevent backtracking
                    if (!visited.count(new_board)) {
                        q.push(new_board);
                        visited.insert(new_board);
                    }
                }
            }
            step++;
        }
        return -1;
    }
};

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

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

相关文章

错误票据题解

1、错误票据 题目信息 思路 先对数组进行排序&#xff0c;然后遍历数组&#xff0c;如果出现两个一样的&#xff0c;就是重号&#xff0c;如果连续的两个数之间相差大于1就是断号 题解 #include<bits/stdc.h> #define hh ios::sync_with_stdio(false),cin.tie(0),cou…

Golang - 从源码到二进制:探索在国产CPU架构上交叉编译Minio的方法

文章目录 前置知识交叉编译Go 支持的所有操作系统和体系结构组合列出 Go 支持的所有操作系统和体系结构组合 大端、小端minio使用的go版本ABI 官方下载目标编译loongarch架构下的minio编译mipsle架构下的minio编译sw64架构下的minio 前置知识 交叉编译 交叉编译是指在一台主机…

IP详细地理位置查询:技术原理与应用实践

IP地址是互联网上设备的唯一标识&#xff0c;在网络安全、个性化服务等领域具有重要意义。通过IP详细地理位置查询&#xff0c;可以获取到IP地址所在地的具体信息&#xff0c;为网络管理、定位服务等提供支持。IP数据云将深入探讨IP详细地理位置查询的技术原理、应用实践以及相…

【JavaEE】_form表单构造HTTP请求

目录 1. form表单的格式 1.1 form表单的常用属性 1.2 form表单的常用搭配标签&#xff1a;input 2. form表单构造GET请求实例 3. form表单构造POST请求实例 4. form表单构造法的缺陷 对于客户端浏览器&#xff0c;以下操作即构造了HTTP请求&#xff1a; 1. 直接在浏览器…

CTR之行为序列建模用户兴趣:DIN

在前面的文章中&#xff0c;已经介绍了很多关于推荐系统中CTR预估的相关技术&#xff0c;今天这篇文章也是延续这个主题。但不同的&#xff0c;重点是关于用户行为序列建模&#xff0c;阿里出品。 概要 论文&#xff1a;Deep Interest Network for Click-Through Rate Predict…

前端|Day5:盒子模型(黑马笔记)

Day5:盒子模型 目录 Day5:盒子模型一、选择器1.结构伪类选择器基本使用 2. :nth-child(公式)3.伪元素选择器 二、PxCook三、盒子模型1.盒子模型-组成2.边框线四个方向单方向边框线 3.内边距4.尺寸计算5.外边距6.版心居中7.清除默认样式8.元素溢出9.外边距问题合并现象外边距塌陷…

14. UE5 RPG使用GameplayTag

GameplayTag本来是应用在GAS游戏技能系统里面的&#xff0c;后来UE直接将其抽离出来&#xff0c;作为一个模块&#xff0c;现在可以不在GAS里也可以使用这个模块。比如&#xff0c;我需要判断一个射线拾取的物体&#xff0c;首先我需要判断这个actor是否存在&#xff0c;然后判…

K8S实战:Centos7部署Kubernetes1.20.0集群

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建3台虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置&#xff08;3台虚拟机进行相同处理&#xff09;1.2.1、配置host1.2.2、关闭防火墙1.2.3、…

区块链游戏解说:什么是 Planet IX

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Planet IX Dashboard 什么是 Planet IX Planet IX&#xff0c;一个由原生 IX TOKEN 推动的 Web3 玩赚平台。作为一款 GameFi 策略游戏&#xff0c; Planet IX 上的每项资…

python毕设选题 - 大数据商城人流数据分析与可视化 - python 大数据分析

文章目录 0 前言课题背景分析方法与过程初步分析&#xff1a;总体流程&#xff1a;1.数据探索分析2.数据预处理3.构建模型 总结 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到…

【C++语法基础】3.常用数学运算和位运算技巧(✨新手推荐阅读)

前言 在C编程中&#xff0c;数学运算是非常基础和常用的功能。C提供了多种数学运算符和函数&#xff0c;用于执行基本的数学计算&#xff0c;如加减乘除、取模运算以及位运算等。 一、加减乘除四则运算 C中的基本算术运算符包括加法()、减法(-)、乘法(*)、除法(/)。这些运算…

C++ bfs建模(六十一)【第八篇】

今天我们来学习一下bfs建模 1.bfs建模 BFS 建模 广度优先搜索是从某个起点由内向外逐层搜索&#xff08;多起点 BFS 中所有起点拥有同样的搜索特性&#xff09;。 搜索顺序为&#xff1a;1→2→3→4→5→6→7→8。 之前的课程中&#xff0c;我们学习过搜索树中的每个结点均表…

C++ 之LeetCode刷题记录(三十三)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;…

汽车电子论文学习---电动汽车用高功率密度碳化硅电机控制器研究

关键重点&#xff1a; sic的特点&#xff1a;耐压高、开关速度快、开关损耗小&#xff1b;采用sic的控制器&#xff0c;损耗降低70%&#xff0c;续航里程提高5%。sic的模块并联设计难度高于IGBT模块&#xff1b;多芯片并联导致热耦合问题、温升不均&#xff0c;导致部分芯片率…

【C++】类和对象---const成员,取地址及const取地址操作符重载,static成员

目录 ⭐const成员 ⭐取地址及const取地址操作符重载 ⭐static成员 ⭐概念 ⭐特性 ⭐const成员 将const修饰的“成员函数”称之为const成员函数&#xff0c;const修饰类成员函数&#xff0c;实际修饰该成员函数隐含的this指针&#xff0c;表明在该成员函数中不能对类的任何…

字符串相乘

43. 字符串相乘https://leetcode.cn/problems/multiply-strings/ 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整…

快速学习springsecurity最新版 (版本6.2)---用户认证

简介 ​ Spring Security 是 Spring 家族中的一个安全管理框架。目前比较主流的是另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富,但是shiro并不简便,这里轻量级安全框架更推荐国产安全框架satokensatoken官网 ​ 一般大型的项目都…

Normalization,LayerNormalization和BatchNormalization

前言 假设我们的损失函数在空间中是一个曲面&#xff0c;这个曲面可以被我们人为的切出等高线&#xff0c;在采用梯度下降算法的时候&#xff0c;我们沿着梯度反方向迭代&#xff08;梯度方向与等高线垂直&#xff09;&#xff0c;到最后我们会抵达上图曲面的最低点。 在上面的…

strings.xml补充知识

复数名词 <plurals name"book"><item name"one">book</item><item name"others">books</item> </plurals>int bookCount 4; Resources res getResources(); String bookCount res.getQuantityString(R.…

数据结构与算法:队列

在上篇文章讲解了栈之后&#xff0c;本篇也对这一章进行收尾&#xff0c;来到队列&#xff01; 队列 队列的介绍队列的存储结构队列顺序存储的不足之处 循环队列的定义队列的链式存储结构链队列的构建链队列的初始化队尾入队队头出队获取队头队尾元素判断队列是否为空获取队列元…