[蓝桥杯][历届试题]九宫重排

蓝桥杯 历届试题-九宫重排 问题描述  如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。   我们把第一个图的局面记为:12345678.   把第二个图的局面记为:123.46758   显然是按从上到下,从左到右的顺序记录数字,空格记为句点。   本题目的任务是已知九宫的初态和终态,求最少经过多少步的移 阅读详情

题目描述

如下面第一个图的九宫格中,放着  1~8  的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。

 

我们把第一个图的局面记为:12345678.
把第二个图的局面记为:123.46758
显然是按从上到下,从左到右的顺序记录数字,空格记为句点。
本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。

 

输入

输入第一行包含九宫的初态,第二行包含九宫的终态。 

输出

输出最少的步数,如果不存在方案,则输出-1。

样例输入

12345678. 
123.46758 

样例输出

3

题目链接:https://www.dotcpp.com/oj/problem1426.html?sid=3582735&lang=1#editor

 思路:BFS+unordered_map判重。

分析:题目乍一看是一个类似于走迷宫的题,但细看一下这道题与走迷宫是有些不同的。走迷宫是给出起点和终点,求起点到终点的最少步数,这道题也是求起点到终点的最少步数。

但是这道题是需要保证从起点走到终点后数字和给出的终态中的数字相同(例如图中样例起点到终点最少步数是3步,有两条路线1.空格->8->5->4 ;2.空格->6->5->4;只有走第一条路线才能使九宫格的终态符合题设要求)。九宫格的始态和终态是以字符串的格式给出的,所以我们在BFS的过程中也可以以字符串格式保存中间过程,这样的话,如果在BFS过程中出现了和终态一样的九宫格状态就说明存在最少步数,否则则不存在任何走法使九宫格始态变为终态。

那么如何变换九宫格的状态呢?

仔细观察样例图可以发现,当将任意一个数字移向空白块时,字符串中的.就会和对应的数字交换,可以根据这点来变换九宫格状态。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef struct node
{
    string state;
    int step;
}node;
node start,End;
int dx[]={0,0,-1,1};
int dy[]={-1,1,0,0};
unordered_map<string,bool>s;
void bfs()
{
    queue<node>q;
    q.push(start);
    while(!q.empty())
    {
        node t = q.front();
        q.pop();
        s[t.state]=true;
        if(t.state==End.state)
        {
            cout<<t.step<<endl;
            return ;
        }
        int x,y;
        //找到.所在的位置
        for(int i = 0; i < t.state.length();i++)
        {
            if(t.state[i]=='.')
            {
                x=i/3;
                y=i%3;
                break;
            }
        }
        for(int i = 0;i<4;i++)
        {
            int xx = x+dx[i];
            int yy = y+dy[i];
            if(xx>=0&&xx<3&&yy<3&&yy>=0)
            {
                int pos = xx*3+yy;
                int pospre = x*3+y;
                string temp = t.state;
                swap(temp[pospre],temp[pos]);    #变换九宫格状态
                if(!s.count(temp))
                {
                    s[temp]=true;
                    q.push({temp,t.step+1});
                }
            }
        }
    }
    cout<<-1<<endl;
    return ;
}
int main()
{
    cin>>start.state>>End.state;
    bfs();
    return 0;
}

 

计算机视觉:暗通道去雾算法的原理及python实现 在绝大多数非天空的局部区域中,某些像素总会至少有一个颜色通道的值很低。对于一幅图像J(x),其暗通道的数学定义表示如下:其中,Ω(x)表示以x为中心的局部区域,上标c表示RGB三个通道。该公式的意义用代码表达也很简单,首先求出每个像素RGB分量中的最小值,存入一副和原始图像大小相同的灰度图中,然后再对这幅灰度图进行最小值滤波,滤波的半径由窗口大小决定。 阅读详情

相关推荐

博图编写温度程序_s7 smart200的CRC-16校验程序

最近做一个小项目,项目中采用485自由口通讯方式,使用一台西门子S7 smart200对一台冷水机做多个状态和温度做监控,并能对冷水机进行启停控制,和参数设置,因为冷水机的协议不是标准modbus格式,所以要自己编写通信协议。其中要用到CRC校验,在网上找了些别人写的程序,基本上用不了。只能自力更生了。首先,找到CRC校验的算法,并理解。 下面就是我找的算法(这个网上很多),1....

weixin_39539761的博客 3062

题目 1426: [蓝桥杯][历届试题]九宫重排

题目 1426: [蓝桥杯][历届试题]九宫重排 时间限制: 1Sec 内存限制: 128MB 提交: 2574 解决: 767 题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可

韩绘锦的博客 354

UWB灵犀遥控器方案介绍

UWB灵犀指向遥控器的技术原理和方案介绍

xiongdauwb的博客 3898

蓝桥杯 历届试题 九宫重排 解题报告(BFS,双向BFS优化)

历届试题 九宫重排   时间限制:1.0s   内存限制:256.0MB        锦囊1 搜索。 锦囊2 比较经典的搜索题,可以直接搜索或者使用双向搜索优化。 问题描述   如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所

Roy在编程 865

基于Apache SeaTunnel构建CDC数据同步管道

Apache SeaTunnel是一个数据集成开发平台,其发展经历了几个重要阶段:ETL时代(90年代):面向结构化数据库的数据同步,用于构建数据仓库。MPP和分布式技术流行:使用技术如Hive进行数据仓库的构建。此阶段主要使用mapreduce程序进行数据搬运和转换。数据湖技术流行:重视数据集成,强调先同步数据至数据湖仓储,再进行业务面向的转换和设计。CDC,即变更数据捕获,是一种捕获数据库变更事件(如插入、更新、删除)的技术。

weixin_54625990的博客 2172

Raptor码(一):2007RFC5053标准编解码学习

RFC 5053 标准

a_beatiful_knife的博客 3493

蓝桥杯训练题1426: [蓝桥杯][历届试题]九宫重排【方法一:bfs和map判重】【方法二:双向bfs+map判重】

题目链接: https://www.dotcpp.com/oj/problem1426.html 题目大意: 思路: 大概说明:这题主要就是求最短路径的问题,像这种用bfs最好,如果用dfs的话容易超时。因为bfs只要查找到就可以直接输出了,而dfs是一直查下去。然后这题不仅仅需要用到bfs,因为会有被覆盖的情况,如下: 我们会发现从④到⑤的步骤就出现了走之前走过的地方,单单一个bfs是没法解决...

zhoupingqi2017的博客 707

中心对数比变换(Centered Log Ratio Transformation,CLR)的原理及scikit-bio介绍

中心对数比变换(Centered Log Ratio Transformation,CLR)是一种数据预处理方法,常用于成分数据分析领域。在成分数据中,各成分之间通常存在一定的约束关系,比如它们的和为固定值等,中心对数比变换可以有效地处理这种具有特殊约束的数据。官方文档scikit-bio是一个在Python3中处理生物数据的库成分统计 (skbio.stats.composition )模块中的,此函数将组合从Aitchison几何体转换到真实空间。这个clr。

RECORD LEARN PROGRESS 1万+

【双向BFS】九宫重排

题目 1426: [蓝桥杯][历届试题]九宫重排 链接:C语言网——九宫重排 题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。 输

张^老头的博客 420

ICP-10111气压传感器原理图设计,已量产(压力传感器)

在最近的室内导航定位项目中,我们需要一款能捕捉厘米级垂直高度变化的气压传感器 —— 毕竟室内环境里,哪怕是单个台阶的高度差都得精准识别。对比了几款器件后,最终选定了 ICP-10111:它 ±1Pa 的压差精度刚好能把高度差分辨到 8.5cm,0.4Pa 的低压力噪声能让数据输出足够稳定,再加上 0.5Pa/℃的低温漂特性,长期工作的可靠性也能满足需求。下面聊聊这套适配 ICP-10111 的硬件电路设计细节。

不脱发的程序猿 333

基于Xilinx K7-410T的高速DAC之AD9129开发笔记(一)

引言:从本文开始,我们介绍下项目中设计的并行LVDS高速DAC接口设计,包括DAC与FPGA硬件接口设计、软件设计等。项目设计高速DAC采用了ADI公司的AD9129,该芯片最大更新速率5.7Gsps,该芯片在宽带通信应用、LTE、雷达信号产生、干扰机等领域有广泛应用。

FPGA_Designer 2534

蓝桥杯 历届试题 九宫重排 BFS+搜索

历届试题 九宫重排 题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。 输入 输入第一行包含九宫的初态,第二行包含九宫的终态。 输出

wxh_silence的博客 836

鸿蒙系统开发工程师:核心技术解析与深度面试指南

摘要: 鸿蒙系统开发工程师需具备底层驱动开发、系统移植优化及分布式架构能力。核心职责包括硬件适配(Bootloader、内核移植、HDF驱动开发)、性能调优(启动加速、功耗管理)及稳定性保障。技术要求涵盖C/C++编程、Linux内核机制、鸿蒙架构(HDF、分布式服务)及ArkTS/ArkUI基础。面试重点考察系统移植流程(如ARM板适配)、驱动开发(I2C/Display)、性能优化手段及内存/同步机制的应用。

郑伟强dev的专栏 429

蓝桥杯 历届试题 九宫重排 (广搜)

历届试题 九宫重排   时间限制:1.0s   内存限制:256.0MB        问题描述   如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。   我们把第一个图的局面记为:12345678.   把第二个图的局面记为:123.46758

Benjamin_Z的博客 1453

计算机控制技术及应用

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝桥杯 历届试题 九宫重排 java

蓝桥杯试题 九宫重排 本人太蠢了,不会写这个题目,借鉴了博主南墙的写法,由于其中使用的一些本人不太熟悉的内容,故此贴上来,为防止以后遇到类似问题,好再做翻阅,代码中做了更详细的注释,接下来上代码: package 历届试题; import java.util.ArrayList; import java.util.HashSet; import java.util.Scanner; publ...

WillXinlin的博客 384

Java实现 蓝桥杯 历届试题 九宫重排

问题描述   如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678.   把第二个图的局面记为:123.46758   显然是按从上到下,从左到右的顺序记录数字,空格记为句点。   本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。...

南 墙 1万+

bfs | [蓝桥杯][历届试题]九宫重排

[蓝桥杯][历届试题]九宫重排 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 本题目的任务是已知九宫的初态和终态,求最少经过多少步的移...

cp0328的博客 3489

蓝桥杯 历届试题 九宫重排 经典八数码问题 A*算法+康托展开

问题描述   如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。   我们把第一个图的局面记为:12345678.   把第二个图的局面记为:123.46758   显然是按从上到下,从左到右的顺序记录数字,空格记为句点。   本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。 输入格式   输入第一行包含九宫的初态,第二行包含九宫的终态。 输

Lionel 4915

蓝桥杯【历届试题】九宫重排

原文:https://blog.youkuaiyun.com/qq_34594236/article/details/64446491 题目思路: 我们可以把每一种局面当作是一个结点。空白格可以向四个方向移动,移动后的局面是新的结点。显然,我们可以通过bfs来搜索目标局面,并且一旦搜索到就一定是最少移动次数。我们需要解决的问题有两个。 1:如何记录每一种局面。 2:如何判断当前局面是否已经出现过,即...

桐原因的博客 431

蓝桥杯历届试题-九宫重排

如下图的九宫格中,放着 1 ~ 8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成图 2 所示的局面。题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出 -1。显然是按从上到下,从左到右的顺序记录数字,空格记为句点。输入第一行包含九宫的初态,第二行包含九宫的终态。输出最少的步数,如果不存在方案,则输出 -1。我们把上图的局面记为:12345678.把下图的局面记为:123.46758。

weixin_74189414的博客 551

蓝桥杯 历届试题 九宫重排

参考:http://blog.youkuaiyun.com/u010372095/article/details/20077681  #include #include #include #include using namespace std; #define MAX 10 #define MAXK 9 #define MAXC 400000 #define MAXD 4 in

lnlnlnying的博客 569

问题 1426: [蓝桥杯][历届试题]九宫重排

题目链接:https://www.dotcpp.com/oj/problem1426.html 题目描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。 我们把第一个图的局面记为:12345678. 把第二个图的局面记为:123.46758 显然是按从上到下,从左到右...

3153
上一篇: 素数筛法
下一篇: [蓝桥杯][2014年第五届真题]地宫取宝
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值