蓝桥杯算法题:卡片换位

问题描述
你玩过华容道的游戏吗?这是个类似的,但更简单的游戏。

看下面 2 x 3 的格子

+---+---+---+
| A | * | * |
+---+---+---+
| B |   | * |
+---+---+---+
1
2
3
4
5
在其中放 5 张牌,其中 A 代表关羽,B 代表张飞,* 代表士兵,还有一个格子是空着的。

你可以把一张牌移动到相邻的空格中去(对角不算相邻)。

游戏的目标是:关羽和张飞交换位置,其它的牌随便在哪里都可以。

输入格式
输入两行 6 个字符表示当前的局面

输出格式
一个整数,表示最少多少步,才能把 AB 换位(其它牌位置随意)

样例输入1

* A
**B
1
2
样例输出1
17

样例输入2

A B
***
1
2
样例输出2

解题思路:我是想把二维变成一维来算的,如图中的两个字符串,我把他变成* AB**来看,通过查找空格进行左移右移,具体可以看代码。可是他有一个测试点出现运行错误,很奇怪,也不像是类型超出最大值,或者数组越界,难道是队列满了?求大佬帮忙看下

不过又去看了一下,好像是它样例的问题

#include<bits/stdc++.h>
using namespace std;
map<string,long long>vis;
int x,y;
long long bfs(string s){queue<string>q;q.push(s);vis[s]=0;while(!q.empty()){string now=q.front();q.pop();int pos=now.find(' ');string temp=now;int len=now.length();if(x==now.find('A')&&y==now.find('B')){return vis[now];}swap(now[pos],now[(pos+1)%len]);//格子往右移if(vis[now]==0){vis[now]=vis[temp]+1;q.push(now);}swap(now[pos],now[(pos+1)%len]);swap(now[pos],now[(pos+len-1)%len]);//格子往左移if(vis[now]==0){vis[now]=vis[temp]+1;q.push(now);}swap(now[pos],now[(pos+len-1)%len]);if(pos==1||pos==4){//在格子中间,还能往上下走 swap(now[pos],now[(pos+3)%len]);if(vis[now]==0){vis[now]=vis[temp]+1;q.push(now);}// swap(now[pos],now[(pos+3)%len]);}}return -1;
}
int main(){string s1,s2;getline(cin,s1);getline(cin,s2);reverse(s2.begin(),s2.end());s1+=s2;x=s1.find('B');y=s1.find('A');cout<<bfs(s1)<<endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSL协议是什么?有什么作用?

SSL协议是一种让互联网上的数据传输变得更安全的技术。它的主要作用是&#xff1a; 保密性&#xff1a; 使用加密手段&#xff0c;让别人偷看不了你在网上发的信息&#xff08;比如密码、聊天内容、银行卡号等&#xff09;。完整性&#xff1a;防止你的信息在传输途中被偷偷修…

隐私计算实训营学习八:隐语SCQL的开发实践

文章目录 一、SCQL使用集成最佳实践1.1 SCQL使用流程1.2 SCQL部署1.3 SCQL使用示例 二、SCQL工作原理三、使用SecretNote上手体验SCQL 一、SCQL使用集成最佳实践 1.1 SCQL使用流程 SCQL使用&#xff1a; SCQL 开放 API 供⽤户使⽤/集成。可以使⽤SCDBClient上⼿体验(类似与My…

51单片机ESP8266WiFi模块简介

乐鑫与安信可关系 乐鑫是生产esp8266芯片的厂家&#xff0c;安信可是基于esp8266芯片生产模组的厂家&#xff0c;所谓模组是基于芯片制作的套件。 波特率 ESP8266系列模组出厂使用的是AT固件&#xff0c;默认波特率是115200。实际上&#xff0c;模组在上电过程中首先是在748…

4月6号排序算法(2)

堆排序 讲堆排序之前我们需要了解几个定义 什么叫做最大堆&#xff0c;父亲节点&#xff0c;以及孩子节点 将根节点最大的堆叫做最大堆或大根堆&#xff0c;根节点最小的堆叫做最小堆或小根堆。 每个节点都是它的子树的根节点的父亲 。 反过来每个节点都是它父亲的孩子 。 …

二维相位解包理论算法和软件【全文翻译- 质量分布图(3.3)】

在本节中,我们将定义几个在相位解包中非常有用的质量映射。质量图是定义给定相位数据中每个像素质量或好坏的数值数组。它们对于指导第 4 章将要介绍的几种路径跟踪算法是必要的,对于第 5 章将要介绍的一些加权 L^P-norm 算法也是必要的。 我们要讨论的第一个质量图是相关图,…

UART设计

一、UART通信简介 通用异步收发器&#xff0c; 特点&#xff1a;串行、异步、全双工通信 优点&#xff1a;通信线路简单&#xff0c;传输距离远 缺点&#xff1a;传输速度慢 数据传输速率&#xff1a;波特率&#xff08;单位&#xff1a;baud&#xff0c;波特&#xff09; …

4、双指针-移动零

首先不能复制&#xff0c;只能在原数组是哪个操作&#xff0c;那么很多集合的方式就不行了。当然在现实开发中肯定是可以的。目前按照题目来说是不可以的。所以我们可以思考下&#xff0c;是否可以通过交换来实现。 初始化一个变量 to 为 0。这个变量的目的是跟踪非零元素应该…

云计算存在的安全隐患

目录 一、概述 二、ENISA云安全漏洞分析 三、云计算相关系统漏洞 3.1 概述 3.2 漏洞分析 3.2.1 Hypervisor漏洞 3.2.1.1 CVE-2018-16882 3.2.1.2 CVE-2017-17563 3.2.1.3 CVE-2010-1225 3.2.2 虚拟机漏洞 3.2.2.1 CVE-2019-14835 3.2.2.2 CVE-2019-5514 3.2.2.3 CV…

观测线程的工具——jconsole

joconsole的简单使用 joncole位置在jdk/bin路径中&#xff0c;在进入路径后可以查找到jconsole.exe的应用程序。如图&#xff1a; 双击创建jconsole进程&#xff0c;可以在里面选择所要观测的java文件。 以我的代码为例&#xff1a; class MyThread extends Thread {Overrid…

(一)基于IDEA的JAVA基础11

为什么使用多重循环 有时单独一个循环不能满足我们的要求&#xff0c;我们就要使用多重循环&#xff0c;这不废话吗。 多重循环的使用: 一般我们使用多重循环都是双重for循环&#xff0c; 语法: for(循环条件){ 循环操作1&#xff1b; for(循环条件2){ 循环操作2&#x…

Struts2的入门:新建项目——》导入jar包——》jsp,action,struts.xml,web.xml——》在项目运行

文章目录 配置环境tomcat 新建项目导入jar包新建jsp界面新建action类新建struts.xml,用来配置action文件配置Struts2的核心过滤器&#xff1a;web.xml 启动测试给一个返回界面在struts.xml中配置以实现页面的跳转&#xff1a;result再写个success.jsp最后在项目运行 配置环境 …

post请求搜索功能爬虫

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency>…