跳蚱蜢(蓝桥杯)

news2024/9/22 1:43:58

文章目录

  • 跳蚱蜢
    • 题目描述
    • 答案:20
    • bfs

跳蚱蜢

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

如下图所示: 有 9 只盘子,排成 1 个圆圈。 其中 8 只盘子内装着 8 只蚱蜢,有一个是空盘。 我们把这些蚱蜢顺时针编号为 1 ~ 8。

在这里插入图片描述

每只蚱蜢都可以跳到相邻的空盘中, 也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。

请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列, 并且保持空盘的位置不变(也就是 1-8 换位,2-7换位,…),至少要经过多少次跳跃?

答案:20

bfs

这段C++代码是用来解决一个特定的问题:计算把一系列编号为1至8的蚱蜢,从顺时针排列改为逆时针排列(在一个圆圈中,含有一个空盘),至少需要多少次跳跃。下面是对代码各部分的详细注释:

// 包含C++标准库,例如输入输出流、数据结构等
#include<bits/stdc++.h>
using namespace std;

// 定义初始状态字符串和目标状态字符串
string st="123456780",ed="876543210";
// 使用哈希表来记录每个状态的最小跳跃次数
unordered_map<string,int> d;
// 使用队列来进行宽度优先搜索(BFS)
queue<string> q;
// 定义4种跳跃方式:向右跳1格、向左跳1格、向右跳2格越过一个蚱蜢、向左跳2格越过一个蚱蜢
int dx[4]={1,-1,2,-2};
// 定义总的盘子数量
int n=9;

// 定义宽度优先搜索函数,用于找到从初始状态到目标状态的最少跳跃次数
int bfs()
{
    // 将初始状态入队,并将其跳跃次数设为0
    q.push(st);
    d[st]=0;
    // 当队列不为空时进行循环
    while(q.size())
    {
        // 从队列中取出一个状态
        auto t=q.front();
        q.pop();
        // 查找空盘的位置
        int k=t.find('0');
        // 试验四种跳跃方式
        for(int i=0;i<4;i++)
        {
            // 创建一个新状态,作为当前状态的副本
            string str=t;
            // 尝试执行一次跳跃,注意取模操作是为了处理环形排列的情况
            swap(str[k],str[(k+dx[i]+9)%9]);
            // 如果新状态已经被访问过,则忽略
            if(d.count(str)) continue;
            // 否则,记录新状态的跳跃次数(当前状态的跳跃次数+1),并将新状态入队
            d[str]=d[t]+1;
            q.push(str);
        }
    }
    // 返回到达目标状态的最少跳跃次数
    return d[ed];
}

int main()
{
    // 输出最少跳跃次数
    cout<<bfs()<<endl;
    return 0;
}

这个程序主要利用宽度优先搜索(BFS)算法来找到从初始状态到目标状态所需的最少跳跃次数。通过逐个尝试不同的跳跃方式,并记录每个新状态的最少跳跃次数,当找到目标状态时,其记录的跳跃次数即为所求的最少跳跃次数。

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

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

相关文章

JVM 基础知识

JAVA code加载执行顺序&#xff1a; *.java --->*.class->类装载子系统、字节码执行引擎 JVM虚拟机组成&#xff1a; 堆、方法区&#xff08;元空间&#xff09;、栈&#xff08;线程&#xff09;、本地方法栈、程序计数器 栈帧组成&#xff1a; 栈帧&#xff1a;局部…

管理类联考–复试–管理类知识–计划

决策是管理的核心&#xff0c;决策是计划的前提&#xff0c;计划是管理的首要职能&#xff0c;战略是一种计划。 #mermaid-svg-kwa82umCx6PXrp8x {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kwa82umCx6PXrp8x .e…

Linux操作系统及进程(三)进程优先级及特性

目录 一、优先级概念 二、查看系统进程 三、进程切换 一、优先级概念 1.cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 2.优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用&#xff0c;可以改善系统性能。…

在面对API的安全风险,WAAP全站防护能做到哪些?

随着数字化转型的加速&#xff0c;API&#xff08;应用程序接口&#xff09;已经成为企业间和企业内部系统交互的核心组件。在应用程序开发过程中&#xff0c;API能够在不引起用户注意的情况下&#xff0c;无缝、流畅地完成各种任务。例如从一个应用程序中提取所需数据并传递给…

Web漏洞-SQL注入之二次、加密、DNS加密注入

实例1&#xff1a;sqli-labs21 输入admin&#xff0c;admin 测试&#xff1a; 可以看到注入点在cookie处&#xff0c;发送到decoder&#xff08;解密&#xff09; 所以如果要注入&#xff0c;需要将注入语句加密 Eg&#xff1a;admin’ and 11加密后&#xff1a;YWRtaW4ZIGFu…

95% 的公司面临 API 安全问题

API 对企业安全发挥着关键作用&#xff0c;但绝大多数企业都为此遭受日益严重的安全风险。据安全公司 Fastly最近做的一项调查显示&#xff0c;84% 的受访企业缺乏足够的API安全措施&#xff0c;95%的企业在过去1年中遇到过 API 安全问题。 此外&#xff0c;79%的受访企业出于A…

Java基于微信小程序的校园请假系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…

【Java程序设计】【C00366】基于(JavaWeb)Springboot的纹理生产图片系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

PyQt:实现菜单栏的点击拖动效果

一、整体步骤 1.设计UI文件 2.调用显示 3.效果展示 二、设计UI文件 1.添加 Scroll Area控件&#xff0c;作为菜单栏的布置区域 2.设置 Scroll Area控件的属性 3.Scroll Area控件内放置 按钮控件 组成菜单栏 此处&#xff0c;放置了需要了6个按钮&#xff0c;并设置按钮的固…

代码随想录算法训练营第二十九天|Leetcode332 重新安排行程、Leetcode51 N皇后、Leetcode37 解数独

代码随想录算法训练营第二十九天|Leetcode332 重新安排行程、Leetcode51 N皇后、Leetcode37 解数独 ● Leetcode332 重新安排行程● 本题特点● 解题思路● 代码实现 ● Leetcode51 N皇后● 本题特点● 解题思路● 代码实现 ● Leetcode37 解数独● 本题特点● 解题思路● 代码…

Hashtable 是如何保证线程安全的?

1、典型回答 Hashtable 保证线程安全主要是通过给关键方法&#xff0c;例如 put 添加方法、remove 删除方法&#xff0c;添加 synchronized 加锁来保证线程安全的。 2、全面剖析 Hashtable 保证线程安全的方法实现非常简单粗暴&#xff0c;就是给关键方法整体添加 synchroni…

Linux 理解文件系统、磁盘结构、软硬链接

目录 一、理解磁盘结构 1、磁盘的物理结构 2、硬件层面理解 3、磁盘的具体物理存储结构 4、进行逻辑抽象 5、磁盘文件的管理 6、创建新文件的过程 二、理解文件系统 1、文件的构成 2、为何选择4KB而非512字节作为基本单位? 3、文件系统的组成 数据块&#xff08;Data Blocks&a…

LeetCode每日一题[c++]-322.零钱兑换

题目描述 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无…

多线程合并练习题,线程安全(售票任务引入)--学习JavaEE的day30

day30 练习&#xff08;day29&#xff09; 注意代码注释&#xff0c;里面涉及代码实现遇到问题及解决方案&#xff0c;由于理解方便没有单独出来 1.计算任务 1.计算任务&#xff0c;一个包含了2万个整数的数组&#xff0c;分拆了多个线程来进行并行计算&#xff0c;最后汇总出…

敏捷开发——第二次作业JS/服务器的部署

部署 Web 服务器 1. 安装 Apache HTTP 服务器并部署静态网页应用 ⭐⭐ 默认情况下&#xff0c;Apache 在 /var/www/html 目录下寻找要提供服务的文件。可以将静态网页文件放置在这个目录下 2.安装 Nginx 并部署静态页面应用 3. 实践部分 1. 2. 3. 在 /var/www/html 目录下…

【算法 高级数据结构】树状数组:一种高效的数据结构(二)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;算法题、 基础算法、数据结构~赶紧来学算法吧 &#x1f4a1;往期推荐&#xff1a; 【算法基础 & 数学】快速幂求逆元&#xff08;逆元、扩展欧几里得定理、小费马定…

kingbase 归档日志

开启归档 archive_mode on archive_commandtest ! -f /home/archive_kb/%f && cp %p /home/archive_kb/%f 注意&#xff1a;修改后需要重启&#xff0c;archive_command 这里设置的是 归档日志文件存储在 归档日志路径 /home/archive_kb 生成归档文件 手动切换 [kin…

茶饮品牌抖音账号规划流量运营策划方案

【干货资料持续更新&#xff0c;以防走丢】 茶饮品牌抖音账号规划流量运营策划方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 冷启动期 1. 直播前期准备 - 进行DOUA/B测试&#xff0…

Unity-UGUI系统

UGUI是什么 UGUI是Unity引擎内自带的UI系统官方称之为:Unity Ul 是目前Unity商业游戏开发中使用最广泛的UI系统开发解决方案 它是基于Unity游戏对象的UI系统&#xff0c;只能用来做游戏UI功能 不能用于开发Unity编辑器中内置的用户界面 六大基础组件 概述 Canvas EventS…

Java基于微信小程序的助农扶贫系统的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#…