第八届蓝桥杯省赛——青蛙跳杯子
第八届蓝桥杯省赛——青蛙跳杯子
题目描述
XXX 星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。
XXX 星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。
如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。
∗WWWBBB*WWWBBB∗WWWBBB
其中,WWW 字母表示白色青蛙,BBB 表示黑色青蛙,∗∗∗ 表示空杯子。
XXX 星的青蛙很有些癖好,它们只做 3 个动作之一:
跳到相邻的空杯子里。
隔着 1 只其它的青蛙(随便什么颜色)跳到空杯子里。
隔着 2 只其它的青蛙(随便什么颜色)跳到空杯子里。
对于上图的局面,只要 1 步,就可跳成下图局面:
WWW∗BBBWWW*BBBWWW∗BBB
本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。
输入格式
输入为 2 行,2 个串,表示初始局面和目标局面。我们约定,输入的串的长度不超过 15。
输出格式
输出要求为一个整数,表示至少需要多少步的青蛙跳。
输入样例:
*WWBB
WWBB*
输出样例:
2
运行限制
最大运行时间:1s
最大运行内存: 256M
题目大意
其实就是将空杯子在6个方向上跳,左三,左二,左一,右一,右二,右三,使之将开始状态转变为终止状态。
下图是模拟的样例:
题目解决思路
- 先将两种状态读入进来,
start
和end
,并记录一下初始状态的长度len
。
cin >> start;cin >> endd;len = start.length();
- 这道题目是道典型的求最短路径的题目,采用bfs的做法,直接枚举6个向量,不越界的且该状态未被更新的则更新该状态的距离,入队列,如果队头状态等于终止状态,则停止搜索返回距离,结束bfs算法。
int bfs()
{unordered_map<string, int> d;q.push(start);d[start] = 0;int dx[6] = {-3, -2, -1, 1, 2, 3};while (q.size()){string t = q.front();q.pop();int distance = d[t];if(t == endd) return distance;int k = t.find('*');for (int i = 0; i < 6; i ++ ){int a = k + dx[i];if(a >= 0 && a < len){swap(t[a], t[k]);if(!d.count(t)){d[t] = distance + 1;q.push(t);}swap(t[a], t[k]);}}}return -1;
}
代码如下~
c++代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <unordered_map>
#include <queue>using namespace std;string start, endd;
queue<string> q;//存储状态
int len;//状态的长度int bfs()
{unordered_map<string, int> d;//存储该状态下的坐标q.push(start);//将初始状态入队列d[start] = 0;//初始状态距离为0int dx[6] = {-3, -2, -1, 1, 2, 3};//6个向量左三、左二、左一、右一、右二、右三while (q.size())//当队列为空时结束bfs算法{string t = q.front();//出队列,命名为状态tq.pop();int distance = d[t];//取出t状态的距离distanceif(t == endd) return distance;//如果t状态和终止状态相等,退出bfs,返回distanceint k = t.find('*');//找出空杯所在的位置for (int i = 0; i < 6; i ++ )//枚举6个向量{int a = k + dx[i];//加上偏移量后点的坐标if(a >= 0 && a < len)//如果没有越界{swap(t[a], t[k]);//交换位置,获取新的状态if(!d.count(t))//如果该状态未被遍历则更新该状态的距离,入队列{d[t] = distance + 1;q.push(t);}swap(t[a], t[k]);//还原现场,因为还有剩余的向量并没有被枚举过}}}return -1;//如果没有找到的话,返回-1
}int main()
{cin.tie(0);//cin加速器cin >> start;//读入开始状态cin >> endd;//读入终止状态len = start.length();//获取状态的长度cout << bfs();//输出答案return 0;
}
第八届蓝桥杯省赛——青蛙跳杯子相关推荐
- 蓝桥杯练习:青蛙跳杯子
青蛙跳杯子 原题链接:问题 1878: [蓝桥杯][2017年第八届真题]青蛙跳杯子 解题思路:将问题简单转化为青蛙和*的换位,使用BFS搜索即可,为避免重复状态使用map存储,可以在O(1)判重 i ...
- 蓝桥杯真题——青蛙跳杯子
题目描述 XX 星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. XX 星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一daim个是空着的,右边的杯子,每 ...
- 2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - C. 魔方状态
2017年第八届蓝桥杯 - 省赛 - C/C++大学A组 - C. 魔方状态 魔方状态 二阶魔方就是只有2层的魔方,只由8个小块组成. 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色, ...
- 49-2017年第八届蓝桥杯国赛试题及详解(Java本科B组)
蓝桥杯历年真题题目及题解目录汇总(推荐) 蓝桥杯算法模板常用套路及API等个人总结 ---------------------------------------------------------- ...
- 2017第八届蓝桥杯省赛JAVA C组真题解析(带源码及解析)
蓝桥杯历年真题及解析. 目录: 蓝桥杯历年真题及解析. A:外星日历(难度:★) 题目: 分析: 代码: B:兴趣小组(难度:★) 题目: 分析: 代码: C:纸牌三角形(难度:★★★) 题目: 分析 ...
- 第八届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
目录 A.外星日历 B.兴趣小组 C.纸牌三角形 D.承压计算 E.杨辉三角(填空) F.最大公共子串 G.Excle地址 H.拉马车 I.青蛙跳杯子 J.图形排版 A.外星日历 某星系深处发现了文明 ...
- 2017年第八届蓝桥杯省赛题目python解答(更新中)
目录 1. 迷宫 2. 跳蚱蜢 3. 魔方状态 4. 方格分割 5. 正则表达式 6. 包子凑数 ·· 1. 迷宫 思路:使用暴力的方法来求解,对于每一个玩家,计算他能否走出去.对于一些走不出去的玩家 ...
- 2017年第八届蓝桥杯省赛B组 C/C++
2017.4.8,第八届蓝桥杯初赛,时隔一月多,才写个题解,贼尴尬...这学期竞赛多,PAT,天梯赛初决赛,蓝桥杯初决赛,ACM省赛,加上课程也多,真是累成狗了,蓝桥初赛后就一直学习课程,和小伙伴一起 ...
- 填词游戏java_第八届蓝桥杯国赛 Java B组 第五题 填字母游戏(博弈论)
解题思路: 因为是博弈论,所以我们要对先手的必胜态和必败态分析. 1.首先我们看赢遇到的状态,就是给出的串的子串有LO*,*OL,L*L这三种情况(就叫福利局吧~).都可以直接填出LOL,获胜. 2. ...
最新文章
- ehcache + mysql例子与性能测试
- Natasha 4.0 探索之路系列(二) 「域」与插件
- django models索引_sql – 为什么Django显式地在唯一字段上创建索引
- gocd_如何将DangerJS集成到GoCD管道中
- matlab中 s 函数简记
- Java迭代器的一般用法
- (28)FPGA计数器设计(软核实现)
- 服务器没有进行新建或修改数据的操作,14-认识DjangoRESTframework
- mysql innodb缓冲池_InnoDB 缓冲池
- mapreduce task与spark task对比
- 计算机国际期刊等级,计算机期刊等级(全)
- GDPR 和个人信息保护的小知识
- 《愤怒的小鸟》全系列游戏——这些都玩过,你就碉堡了~(版本一)
- 杨浦区服务器维修,上海杨浦区dns服务器地址
- 设计模式六大原则——单一职责原则(SRP)
- 康得新董事长是谁?_您人生董事会中的谁?
- html 星空效果,HTML5JSstar_动态星空效果
- 最强免费虚拟机:VirtualBox 4.3.12下载
- CSS实现文字垂直居中
- Unity Android平台接入支付宝SDK
热门文章
- 只想发泄一下!!很气愤!!也许是很气愤!!!!!
- grid网格布局。逆战班
- 孩子读书没兴趣怎么办?什么方法可以改善?
- Python缩进规则 (包含快捷键)
- java脏字过滤方法
- 怎么用计算机计算not,计算机如何进行逻辑计算—(计算机基础课十四)
- dnf剑魂buff等级上限_dnf7号除了免费苍穹武器,这副本改版后增加超强buff!
- concat()函数
- 【软件】一个简单文件批量重命名工具,支持正则替换
- 云服务器带宽原因,造成服务器带宽不足的原因解析