C++每日一练:【数据结构】【容器】棋盘布局

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01 当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。 阅读详情

题目描述

在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。

输入

输入初始状态,一行九个数字,空格用0表示

输出

只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数(测试数据中无特殊无法到达目标状态数据)

样例输入

283104765

样例输出

4

提示

=================================================

#include <iostream>
#include <map> 
#include <queue>
using namespace std;
int ans,sp;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
string st,d="123804765";
struct node{
    string num;
    int z,s;
};
queue<node> que;
map<string,bool> vis;
void bfs(){
    node p0={st,sp,0};
    que.push(p0);
    vis[st]=true;
    while(!que.empty()){
        node p=que.front();
        que.pop();
        if(p.num==d){
            ans=p.s;
            return;
        }
        int z=p.z;
        int x=z/3,y=z%3;
        for(int i=0;i<4;i++){
            int x2=x+dx[i],y2=y+dy[i];
            if(x2>=0&&x2<3&&y2>=0&&y2<3){
                int z2=x2*3+y2;
                string num2=p.num;
                swap(num2[z],num2[z2]);
                if(vis[num2]==false){
                    node p2={num2,z2,p.s+1};
                    que.push(p2);
                    vis[num2]=true;
                }
            }
        }
    }
}
int main(){
    cin>>st;
    if(st!=d){
        sp=0;
        while(st[sp]!='0')
            sp++;
        bfs();
    }
    cout<<ans;
    return 0;
}

算法课程设计 3*3棋盘问题 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标面局(目标状态),找到一种移动方法,实现从初始布局到目标布局的转变。 该代码为针对该问题的BFS实现,代码有详细注释。 立即下载

相关推荐

英飞凌TC3xx DSADC旋变软解码实战:从示波器波形到VX1000数据,手把手教你避坑

本文详细介绍了英飞凌TC3xx系列微控制器的DSADC模块在电机旋变软解码中的实战应用。从示波器波形分析到VX1000数据采集,提供了一套完整的调试方法论,帮助工程师快速定位和解决常见问题,提升解码精度和系统性能。

weixin_30598225的博客 517

7种方法求解八数码问题

【八数码问题】//https://vijos.org/p/1360 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。 【分析】 题目读完第一感

u012283461的博客 10万+

ShardingSphere-JDBC-若依框架集成(SpringBoot)

ShardingSphere基础知识、ShardingSphere-JDBC如何集成进若依框架中 使用的是若依框架前后端版本、动态数据源,可自行切换,默认数据源为达梦8代理端,

编程小菜鸟的笔记 8168

八数码问题

八数码问题 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。   以上就是关于八数码问题的描述。 八数码与逆序对 现在给定两个把数码的游戏局面,请判断是否存在一种移动空格的方式,使得其中一个局面可以变化为另一个局面。   八数码游戏的两个局面可达,当且仅当把两个局面写成一维形式的时候,逆序对个数的奇偶性相同。证明很简单,分为两种情况。第一种情况:我们左右移动空格位置的时候,一维形式数列不变,所以逆序对奇偶性不变。第二

ID246783的博客 2176

Zabbix在Ubuntu 22.04上的性能优化与监控实战:从基础安装到高级配置

本文详细介绍了在Ubuntu 22.04系统上部署和优化Zabbix监控系统的完整流程,从基础安装到高级配置。内容包括MySQL数据库设置、Zabbix服务器与Web前端优化、性能调优策略以及实战监控场景应用,帮助用户构建高效的企业级监控解决方案。

sss66的博客 893

手把手教你修改miniwiggler配置信息,解决UDE连接问题(附FT_PROG工具下载)

本文详细介绍了如何使用FT_PROG工具修改miniwiggler配置信息,解决UDE连接问题。通过分析FT2232芯片的EEPROM结构,提供从驱动安装到配置烧写的完整流程,帮助开发者实现无缝连接英飞凌TriBoard开发板。文章还包含常见错误解决方案和高级批量配置技巧。

weixin_30919429的博客 373

八数码问题(C++)

在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始状态和目标状态,找到一种最少步骤的移动方法,实现从初始状态到目标状态的转变。......

啊噗呲咔的博客 2917

ACL访问控制列表详解:原理、配置与应用

如果发现ACL规则没有达到预期效果,需要检查ACL规则配置是否正确,是否在正确的接口和方向上应用,以及规则顺序是否合理(ACL规则按顺序匹配,匹配到即停止)。其中,rule-id是规则的编号,用于确定规则的匹配顺序;例如,应该先配置针对特定主机和特定端口的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作,避免因规则顺序不当导致的访问控制失效。例如,应该先配置针对特定主机的规则,再配置针对整个网段的规则,最后配置允许所有流量的规则,这样才能确保ACL按照预期工作。

彭大帅的博客 1045

八数码01

在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局,为了使题目简单, 设目标状态为。只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数,若在5000步内无解,则输出-1。找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。三行,每行三个整数,表示方阵的开始状态。

LXY130519的博客 719

从零到一:Abaqus与Matlab联合仿真的自动化流程构建指南

本文详细介绍了如何构建Abaqus与Matlab联合仿真的自动化流程,涵盖基础架构设计、关键接口技术实现、结果提取与处理技术以及高级参数化优化流程。通过Python脚本作为桥梁,实现数据传递和任务控制,帮助工程师提升仿真效率。特别强调了版本兼容性、异常处理和性能监控等实用技巧。

weixin_29090089的博客 610

GD32F130之USART多机通信

简介 在多机通信中,一个从机应该只接收它需要接收的数据,且只应该在它需要接收数据时才检测串口。而始终接收RX线上的数据对从机来说是一种负担。 多机通信硬件设计 远距离方案:RS485 板级方案: 静默模式 静默模式有什么作用? 答:如果 USART 处于静默模式,所有的接收状态标志位将不会被置位。 如何进入静默模式? 答:软件可以通过将 USART_CMD 寄存器中MMCMD 位置 1 使 USART 进入静默模式。 如何从静默模式中唤醒? 答:有两种方式可选,①检测到总线

luliplus的博客 299

蓝桥杯每日一题训练体系:从算法到嵌入式,系统化备赛指南

算法与数据结构是计算机科学的核心基础,其原理在于通过特定的数据组织和计算步骤,高效解决复杂问题。掌握经典算法模型如动态规划、搜索和贪心,能显著提升代码效率与问题解决能力,技术价值体现在优化计算资源与拓展软件功能边界。在工程实践中,这些技术广泛应用于软件开发、人工智能和系统设计等领域。对于备战蓝桥杯等权威技术竞赛的选手而言,系统性的每日训练至关重要。本指南深度融合【动态规划】与【按键扫描程序】等核心热词,构建了一套覆盖软件算法、单片机驱动及EDA设计的阶梯式训练体系,通过“概念-原理-实战-复盘”的闭环,帮助

weixin_34335458的博客 323

修复 Outlook 中缺少的 Microsoft Teams 插件

在 Outlook 中缺少 Microsoft Teams 插件可能会限制您在邮件客户端中直接访问 Microsoft Teams 的功能。在本文中,我将向您介绍一些修复缺少 Microsoft Teams 插件的方法,并提供相应的源代码。如果问题仍然存在,请确保您的 Outlook 和 Microsoft Teams 都是最新版本,并尝试在不同的计算机上进行测试。在实际使用中,请根据您的需求进行适当的修改和调整。如果前面的步骤未能解决问题,您可以尝试重新安装 Microsoft Teams 插件。

CodeWWWCode的博客 5671

【实战解析】嵌套循环:从奥运奖牌统计到C++编程思维启蒙

本文通过奥运奖牌统计案例,详细解析了C++嵌套循环的编程思维启蒙。从变量设计到双重循环的配合,再到常见陷阱与优化方法,帮助初学者快速掌握这一核心概念。特别适合信息学奥赛选手和编程初学者,通过生活化类比提升学习效率。

weixin_30897233的博客 397

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Python深度学习:从入门到实战

亲爱的读者,欢迎您翻开这本书。我们即将探索的,是深度学习的宇宙——一个由数据、算法与算力构筑的奇妙世界。它既是严谨的科学,也是创造的艺术,更是一条通往未来智慧的修行之路。本书将带您从最基础的数学原理出发,亲手搭建神经网络,驾驭Transformer等前沿模型,最终将智慧转化为现实世界的价值。请放下畏惧,保持好奇。这不仅是一次知识的学习,更是一场思维的远行。来,随我一起,开启这趟非凡的旅程吧。

weixin_45747731的博客 296

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

八数码——解题报告

题目描述 在3*3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局和目标布局,为了使题目简单,设目标状态为: 123 804 765 找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变. 解题报告: 网上已有很多关于八数码的解法,大致有几种方法:深搜,广搜,双向广

Emanueling的专栏 2351

P1379 八数码难题-启发式搜索

P1379 八数码难题 题意:在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变。 思路:迭代加深就是每次限制搜索深度 ,这样可以在整个搜索树深度很大而...

BePosit的博客 1022

【BFS】八数码问题(c++基础算法)

作为最经典的一道宽度优先搜索题,它的题面并不是很难懂。题目描述【题意】在3×3的棋盘上摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围上下左右相邻的棋子可以移到空格中。现给出原始状态和目标状态,求实现从初始布局到目标布局的最少步骤(初始状态的步数为0)。如下图,答案为5。【输入格式】第一个3*3的矩阵是原始状态;第二个3*3的矩阵是目标状态。【输出格式】输出移动所用最少的步数。【样例1输入】2 8 3。

aliyonghang的博客 7123

人工智能-A*启发式搜索算法解决八数码问题 Python实现

八数码问题也称为九宫问题。在 3×3 的棋盘,摆有八个棋子,每个棋子上标有 1 至 8 的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格(以数字 0 来表示),与空 格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。该问题可用A*启发式搜索算法求解。

SCY164759920的博客 3万+
上一篇: MATLAB M-Files
下一篇: MATLAB数据类型
std86021
博客等级 码龄5年 181粉丝 250原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

std86021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值