题目描述

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

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

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

输入

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

输出

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

样例输入
Copy

* A
**B
A B
***

样例输出 Copy

17
12

题解:

1、因为棋盘只有两行,可以把他处理成一行处理(BFS的时候方便标记这个棋盘状态),注意隔离边界(用#将第一行和第二行隔离)

2、用set集合记录走过的每一个状态,标记走过的棋盘状态

3、从空格位置开始搜索,目标状态是棋盘中A、B位置互换

#include<iostream>
#include<queue>
#include<algorithm>
#include<set>
using namespace std;
int dir[]={-,,,-};//左右下上
struct node
{
int x;
string s;//保存不同的图,同时用set去标记
int cnt;
}A,B,K;
void bfs()
{
queue<node>p;
p.push(K);
set<string>se;
se.insert(K.s);
while(!p.empty())
{
node now=p.front();
p.pop();
for(int i=;i<;i++)
{
string ss=now.s;
int tx=now.x+dir[i];
if((tx>=&&tx<)||(tx>&&tx<))
{
char h=ss[now.x];
ss[now.x]=ss[tx];
ss[tx]=h;
node temp;
temp.x=tx;
temp.s=ss;
temp.cnt=now.cnt+;
if(ss[B.x]=='A'&&ss[A.x]=='B')
{
cout<<temp.cnt<<endl;
//cout<<temp.s<<endl;
return ;
}
if(se.count(ss)==)//避免往回走,标记棋盘状态
{
se.insert(ss);
p.push(temp);
}
}
}
}
}
int main()
{
string str,s1,s2;
while(getline(cin,s1))
{
getline(cin,s2);
str=s1+"#"+s2;//把二行的图转化为一行,用#分割第一行和第二行
for(int i=;i<;i++)
{
if(str[i]=='A')
A.x=i;
if(str[i]=='B')
B.x=i;
if(str[i]==' ')
K.x=i;
}
K.cnt=;
K.s=str;
bfs();
} return ;
}

[蓝桥杯2016初赛]卡片换位 BFS的更多相关文章

  1. [蓝桥杯2017初赛]跳蚱蜢 BFS

    题目描述 如图所示: 有9只盘子,排成1个圆圈.其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8.每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空 ...

  2. 蓝桥杯 卡片换位(bfs)

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

  3. 蓝桥杯2016年省赛C/C++大学A组

    网友年龄 某君新认识一网友. 当问及年龄时,他的网友说: "我的年龄是个2位数,我比儿子大27岁, 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄" 请你计算:网友的年龄一 ...

  4. [蓝桥杯2017初赛]青蛙跳杯子 BFS

    题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...

  5. 2019年第十届蓝桥杯省赛-迷宫(BFS/Excel大法)

    这题用dfs搜不出来,需要使用bfs并记录路径,设置好方向顺序跑就ok 正解类似:POJ-3984 迷宫问题 然而毕竟是暴力杯,我们的原则是代码能省就省(懒癌晚期 于是乎网上便出现了形形色色的题解,笔 ...

  6. [蓝桥杯]2016蓝桥省赛B组题目及详解

    /*——————————————————————————————————————————————————————————— [结果填空题]T1 (分值:3) 题目:煤球数目 有一堆煤球,堆成三角棱锥形 ...

  7. 蓝桥杯-学霸的迷宫(BFS+记录操作)

     算法提高 学霸的迷宫   时间限制:1.0s   内存限制:256.0MB      问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡 ...

  8. [蓝桥杯][2016年第七届真题]路径之谜(dfs)

    题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡. 城堡里边什么都没有,只有方形石头铺成的地面. 假设城堡地面是 n x n 个方格.[如图1.png]所示. 按习俗,骑士要从西北角走到东南角. ...

  9. [蓝桥杯2017初赛]Excel地址

    题目描述 Excel单元格的地址表示很有趣,它使用字母来表示列号. 比如,A表示第1列,B表示第2列,Z表示第26列,AA表示第27列,AB表示第28列,BA表示第53列,.... 当然Excel的最 ...

随机推荐

  1. 每天进步一点点------SOPC的Avalon-MM IP核(四) KEY_LED IP定制

    /********************************************************************************* * Company : * Eng ...

  2. 搭建 VUE + NODE.JS + ElementUI 学习过程中问题总结

    1.exports 和 module.exports require 用来加载代码,而 exports 和 module.exports 则用来导出代码. module.exports 初始值为一个空 ...

  3. pyqt:布局删除小部件

    参照:https://stackoverflow.com/questions/5899826/pyqt-how-to-remove-a-widget import sip layout.removeW ...

  4. CF1208G Polygons 数论

    题目链接:https://codeforces.com/contest/1208/problem/G 题意:给定两个正整数\(n\)和\(k\),询问在一个圆上你最少需要几个点,才能在这些点上构造出\ ...

  5. Coursera-吴恩达机器学习课程笔记-Week2

    参考资料: 吴恩达教授机器学习课程 机器学习课程中文笔记 Week2 一. 多变量线性回归(Linear Regression with Multiple Variables) 多变量就时当一个exa ...

  6. JavaScript 对象属性与方法

    对象的创建: 1 字面量创建 var obj = {a:1,b:2}; 2 构造函数创建 var obj = new Object(); obj.a = 1; obj.b = 2; 3 Object. ...

  7. 判断是app 或者 网页

    function openInWebview () { let ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger ...

  8. 【Struts 编码】

    EncodingFilter package k.filter; import javax.servlet.*; import javax.servlet.http.HttpServlet; impo ...

  9. 计算机二级-C语言-程序修改题-190123记录-对整数进行取余和除以操作。

    //函数fun功能:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中.高位仍在高位,低位仍在低位. //重难点:思路:因为不是字符串,所以可以把问题变成整数的操作,采用取余和除的操作.对整 ...

  10. 爬虫(十三):PIL模块

    1. PIL模块 在爬虫(十二):图形验证码的识别.滑动验证码的识别(B站滑动验证码)中我留下了一个悬念,为什么安装的是pillow模块,而不是PIL模块.这是因为PIL是python2的产物,它并没 ...