你玩过华容道的游戏吗?这是个类似的,但更简单的游戏。看下面 3 x 2 的格子

+---+---+---+
| A | * | * |
+---+---+---+
| B |  | * |
+---+---+---+

在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵。还有一个格子是空着的。你可以把一张牌移动到相邻的空格中去(对角不算相邻)。
游戏的目标是:关羽和张飞交换位置,其它的牌随便在哪里都可以。

输入:

输入存在多组测试数据,对于每组测试数据:
输入两行6个字符表示当前的局面

输出:

对于每组测试数据输出一个整数表示答案

样例输入:

* A
**B
A B
***

样例输出:

17
12

思路:

这个题我用了string 类来储存他的图,因为只有两行。
但是记录他的状态是问题要思考的一点,这里用了set进行判断,看看某种状态set中是否储存过,如果储存则直接跳过即可。
为什么我再s1 s2中间加了一个其他字符,这是因为在运用数组进行移动时,可以不用特意区分一二行的连接处,如果不加这个字符的话,用到数组进行方向移动时就会出现第一行的末尾直接移动到第二行初的情况。

代码:

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#define maxn  1000005
//#define true false
//#define false true
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
const double pi = acos(-1);
typedef long long ll;
const int mod = 1e9 + 7;
using namespace std;struct wazxy{int x;string s;int steps;
}node,temp;
int A,B;
queue <wazxy> q;
int dx[4]={1,-1,4,-4};void bfs(string ss,int x){set <string>  s;s.insert(ss);temp.s=ss,temp.steps=0,temp.x=x;q.push(temp);while(!q.empty()){temp=q.front();q.pop();if(temp.s[A]=='B'&&temp.s[B]=='A'){cout<<temp.steps<<endl;return ;}for(int i=0;i<4;i++){int nowx=temp.x+dx[i];if((nowx<3&&nowx>=0)||(nowx<=6&&nowx>=4)){node.steps=temp.steps+1;node.s=temp.s;node.x=nowx;node.s[temp.x]=temp.s[nowx];node.s[nowx]=' ';if(s.count(node.s)==0){q.push(node);s.insert(node.s);}}}}}
int main(){string s1,s2,s3;while(getline(cin,s1)){while(!q.empty()) q.pop();getline(cin,s2);s3=s1+'#'+s2;int pos;for(int i=0;i<7;i++){if(s3[i]=='A')  A=i;if(s3[i]=='B')  B=i;if(s3[i]==' ')  pos=i;}bfs(s3,pos);}return 0;
}

[蓝桥杯2016初赛]卡片换位 bfs+set相关推荐

  1. [蓝桥杯2016初赛]卡片换位-bfs

    题目描述 你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵.还有一个格子是空着的. 你可以把一张牌移动到相邻的空 ...

  2. 蓝桥杯2016初赛python题解

    前言:除特殊说明外题解均可AC 蓝桥杯2016初赛 [蓝桥杯2016初赛]网友年龄 [蓝桥杯2016初赛]生日蜡烛 [蓝桥杯2016初赛]方格填数 [蓝桥杯2016初赛]寒假作业 [蓝桥杯2016初赛 ...

  3. 蓝桥杯取球博弈c语言算法,1298: [蓝桥杯2016初赛]取球博弈 (博弈)

    1298: [蓝桥杯2016初赛]取球博弈 (博弈) 1298: [蓝桥杯2016初赛]取球博弈 (博弈) #include #include #include #include #include # ...

  4. [蓝桥杯2016初赛]方格填数-next_permutation

    代码如下: #include <iostream> #include <algorithm> using namespace std;int main() {int a[10] ...

  5. [蓝桥杯2018初赛]全球变暖-dfs,bfs,连通块

    解题思路: bfs:遍历所有未遍历过的陆地,通过bfs计算出当前位置连通陆地的数量cnt,以及被淹没陆地的数量bound,若cnt == bound表示完整淹没的一个岛屿 dfs:将连通块全部标记,如 ...

  6. [蓝桥杯2016初赛]密码脱落

    题目描述 X星球的考古学家发现了一批古代留下来的密码.这些密码是由A.B.C.D 四种植物的种子串成的序列. 仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串). 由于年代久远,其中 ...

  7. [蓝桥杯2016初赛]剪邮票-dfs+next_permutation(好题)

    题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不 ...

  8. [蓝桥杯2016初赛]煤球数目-找规律

    题目描述 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第四层10个(排列成三角形), - 如果一共有100层,共有多少个煤球? 输出 ...

  9. [蓝桥杯2016初赛]交换瓶子

    题目描述 有N个瓶子,编号 1 ~ N,放在架子上. 比如有5个瓶子:2 1 3 5 4,要求每次拿起2个瓶子,交换它们的位置. 经过若干次后,使得瓶子的序号为:1 2 3 4 5 对于这么简单的情况 ...

最新文章

  1. [转]linux下fms2流媒体服务器搭建之五-----flv播放器制作篇
  2. arcgis 中label feature太长换行_MapGIS转换为ArcGIS小结
  3. 移动的验证码安全问题告诉移动网站后......,1860意指一般人不会这样做.
  4. Bitcoin0.21版 公链开发(1) Bitcoind 、Bitcoin-qt编译
  5. linux lanmp 安装教程,linux服务器一键安装包lanmp系列教程之一
  6. 十四、JavaScript表单中的验证API
  7. android 获取apk的版本信息
  8. javaweb实现分页(二)
  9. java getrealpath_JavaEE路径陷阱之getRealPath
  10. java找不到符号类socket,编译报错+解决方法:错误: 找不到符号
  11. java get cookies_Java Cookie.getDomain方法代码示例
  12. Gradle[1]gradle distZip时,增加目录信息到zip中
  13. Android: 在WebView中获取网页源码
  14. SSM框架-实现Mybatis分页功能-foreknow_cms
  15. git commit规范工具
  16. 未处理System.BadImageFormatException,试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
  17. BCG全球资产管理报告:行业增长的驱动力
  18. amos调节变量怎么画_AMOS结构方程教程,调节效应分析操作与结果的详细解读 ——【杏花开生物医药统计】...
  19. 马老师的996,不是鸡汤,是​我的人生信条!
  20. OSChina 周三乱弹 —— 同志,你这个书签掉毛严重啊

热门文章

  1. 数字证书采用公钥体制进行加密和解密。每个用户有一个私钥,用它进行 (46)。。。
  2. 记事本里出现该文件含有Unicode格式的字符,当保存为ANSI编码的文本时,该字符将丢失。怎么解决?
  3. Python学习笔记.OS学习笔记 OS操作系统(operating system)(二)程序和进程 输出进程号,工作目录最有用!
  4. 从计算机视觉的小白变为大神,你需要经历这七个阶段
  5. 如何在无人机上部署YOLOv4
  6. 卷积神经网络如何处理一维时间序列数据?
  7. 树莓派安装docker
  8. HDU 6208 The Dominator of Strings ——(青岛网络赛,AC自动机)
  9. JavaScript - this详解 (三)
  10. Silverlight实用窍门系列:52.Silverlight中的MVVM框架极速入门(以MVVM Light Toolkit为例)...