当前位置: 首页 > news >正文

蓝桥杯算法题:卡片换位

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

看下面 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;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • WPS二次开发系列:WPS SDK初始化
  • Rustdesk二次编译,新集成AI功能开源Gpt小程序为远程协助助力,全网首发
  • 蓝桥杯刷题-13-子矩阵-二维滑动窗口 ಥ_ಥ
  • LC 226.翻转二叉树
  • 怀俄明探空站数据解算PWV和Tm
  • 什么是软件测试?5分钟带你快速了解!
  • JavaEE初阶-线程3
  • CentOS7:Python版本回退
  • Linux下Qt生成程序崩溃文件
  • 24双非考研哈尔滨工程大学计算机(@程程笔记)
  • hydra九头蛇
  • 海纳斯删除广告位
  • 【环境变量】基本概念理解 | 查看环境变量echo | PATH的应用和修改
  • 每日OJ题_两个数组dp①_力扣1143. 最长公共子序列
  • SpringBoot启动禁用员工账号(动态sql通用修改)
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • java8 Stream Pipelines 浅析
  • JS题目及答案整理
  • Laravel5.4 Queues队列学习
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • MySQL-事务管理(基础)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • springMvc学习笔记(2)
  • vue学习系列(二)vue-cli
  • 阿里云前端周刊 - 第 26 期
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从重复到重用
  • 给github项目添加CI badge
  • 解决iview多表头动态更改列元素发生的错误
  • 跨域
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 自动记录MySQL慢查询快照脚本
  • Linux权限管理(week1_day5)--技术流ken
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #android不同版本废弃api,新api。
  • #传输# #传输数据判断#
  • #微信小程序:微信小程序常见的配置传旨
  • (09)Hive——CTE 公共表达式
  • (1)常见O(n^2)排序算法解析
  • (c语言+数据结构链表)项目:贪吃蛇
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (第二周)效能测试
  • (分布式缓存)Redis哨兵
  • (四)库存超卖案例实战——优化redis分布式锁
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .dwp和.webpart的区别
  • .NET Core Web APi类库如何内嵌运行?
  • .Net Core缓存组件(MemoryCache)源码解析
  • .Net MVC + EF搭建学生管理系统
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 生成二级域名
  • .NET 中的轻量级线程安全