解题思路:
这题如果我们考虑蚱蜢跳,有很多蚱蜢,有很多情况,所以我们让空盘跳,这样就简化题目了,然后我们化圆为直,将题目的情况看成字符串012345678,最后要变成087654321,这样题目就变得跟[蓝桥杯2017初赛]青蛙跳杯子
一样了,唯一的区别就是这个是个圆,所以在012345678这个字符串中,0往左跳会跳到8的位置,故需要用环形数组,我们用map存储字符串来标记。

关键点:
1.关于环形的数组,前移动和后移动可能会溢出下标。解决方法是,转移后的坐标公式为
(原坐标+改变量+数组长度)%数组长度
2.map标记,圆盘在跳。

代码如下:

#include <iostream>
#include <queue>
#include <map>
#include <cstring>
using namespace std;
string a, b;
int len;
int dian;//(原坐标+改变量+数组长度)%数组长度
int dx[] = {1, -1, 2, -2};struct node {string str;int dian;int step;node(string str1, int dian1, int step1) {str = str1;dian = dian1;step = step1;}
};int bfs() {map<string, int> st;queue<node>q;q.push(node(a, dian, 0));st[a] = 1;while (q.size()) {node t = q.front();q.pop();if (t.str == b) {return t.step;}for (int i = 0; i < 4; i++) {int dianf = (t.dian + dx[i] + len) % len;//环形数组if (dianf < 0 || dianf >= len)continue;string strf = t.str;char hhh = strf[t.dian];strf[t.dian] = strf[dianf];strf[dianf] = hhh;if (st.count(strf) == 0) {q.push(node(strf, dianf, t.step + 1));st[strf] = 1;}}}}int main() {a = "012345678";b = "087654321";len = a.length();dian = 0;//0在a中的位置cout << bfs() << endl;return 0;
}
#include <iostream>
#include <queue>
#include <cstring>
#include <map>
using namespace std;
string a = "012345678";
string b = "087654321";struct node {string s;int dian;int p;
};int dx[] = {1, -1, 2, -2};void bfs(node start) {queue<node>q;map<string, int>mp;q.push(start);mp[start.s] = 1;while (q.size()) {node t = q.front();q.pop();if (t.s == b) {cout << t.p << endl;return ;}for (int i = 0; i < 4; i++) {int dians = (t.dian + dx[i] + 9) % 9;if (dians < 0 || dians >= 9 )continue;string ss = t.s;char hh = ss[t.dian];ss[t.dian] = ss[dians];ss[dians] = hh;if (mp.count(ss) == 0) {mp[ss]= 1;q.push({ss, dians, t.p + 1});}}}
}int main() {node start = {a, 0, 0};bfs(start);return 0;
}

[蓝桥杯2017初赛]跳蚱蜢-map标记+bfs+环形数组相关推荐

  1. 蓝桥杯2017初赛:迷宫 (dfs搜索)

    [蓝桥杯2017初赛]迷宫 Description X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立, ...

  2. [蓝桥杯2017初赛]九宫幻方-数论+next_permutation枚举

    题目描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分. 三阶幻方指的是将1~9不重复的填入一个33的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶幻方又被 ...

  3. [蓝桥杯2017初赛]方格分割-dfs+思维

    解题思路: 这是大佬的思路: 这道题可能上来会想到搜格子,但搜格子意味着更高的复杂度以及判连通的需要,本题似乎搜索要切开的边更优.由题意,这一条切割线必定经过图的中心点,那么我们一旦确定了半条到达边界 ...

  4. [蓝桥杯2017初赛]包子凑数-模拟+巧妙枚举

    题目描述 小明几乎每天早晨都会在一家包子铺吃早餐.这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子 每种蒸笼都有非常多笼,可以认为是无限笼. 每当有顾客想买X个包子,卖包子的大叔就会选出若干笼包 ...

  5. [蓝桥杯2017初赛]等差素数列-巧妙枚举(思维)

    题目描述 2,3,5,7,11,13,-是素数序列. 类似:7,37,67,97,127,157 这样全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. 2004年,格林与华人 ...

  6. [蓝桥杯2017初赛]贪吃蛇长度-模拟(水题)

    题目描述 小明在爷爷的私人收藏馆里找到一台老式电脑.居然没有图形界面,只能用控制台编程. 经过小明的一阵摸索,神奇地设计出了控制台上的贪食蛇游戏. 如下图,是游戏时画面截图. 其中,H表示蛇头,T表示 ...

  7. [蓝桥杯2017初赛]纸牌三角形-枚举permutation+数论

    题目描述 A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算).要求每个边的和相等. 下图就是一种排法这样的排法可能会有很多. 如果考虑旋转.镜像后相同的算同一种,一共有多少种 ...

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

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

  9. [蓝桥杯2017初赛]算式900+dfs,next_permutation

    法一: 代码如下: #include <iostream> using namespace std; const int N = 15; bool st[N]; int a[N];void ...

最新文章

  1. layui fixbar 返回顶部_FANUC 数控系统机床返回参考点功能的应用研究
  2. 安卓mysql插入数据_【11-25求助】关于Android 的SQLite数据库插入数据报错问题
  3. HTTP相关知识的总结
  4. 用string存取二进制数据
  5. wiki文档_Wiki成为文档的5个理由
  6. Python使用pycuda在GPU上并行处理批量判断素数
  7. 【图像处理】MATLAB:图像压缩
  8. screen 命令示例:管理多个终端会话
  9. java 需要返回类型_在Java中,当一个方法不需要返回数据时返回类型必须是
  10. IT人是这么过圣诞的……
  11. java类注释_Java注释,java类注释详解
  12. java基于springboot+vue校园电动自行车管理系统
  13. mysql 合并同类项_使用Excel处理交易数据同一ID下的多条交易记录
  14. 珠宝行业电子秤串口程序开发
  15. 南通大学python期末考试试卷答案_南通大学自动评教脚本(python)
  16. 【ArcGIS微课1000例】0052:创建地理数据库注记(标准注记、要素关联注记、尺寸注记)
  17. EPICS-从零开始的电机控制
  18. 美国威士忌的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 前端数据库indexedDB入门
  20. ethtool netlink 框架原理浅析

热门文章

  1. Android之提示Cannot call this method while RecyclerView is computing a layout or scrolling
  2. 《看聊天记录都学不会C#?太菜了吧》(6)多晦涩的专业术语原来都会那么简单
  3. python如何正则匹配浮点值_Python正则表达式字符串数组到浮点数组
  4. 华为ar2200路由器 策略路由_路由交换篇 06 华为路由器RIP协议的配置
  5. 王道408数据结构——第四章 串(KMP算法)
  6. redhat yum 安装 mysql_Redhat 7 下Mysql8.0.19安装配置图文详解(配合使用 centos YUM源)...
  7. jq取第一个子元素为select_【转】jquery如何获取第一个或最后一个子元素?
  8. 中国第一个发《Nature》的竟然是清朝人!被皇帝夸天下第一,他却觉得羞耻..........
  9. 有朋友问我为什么这么帅
  10. 厉害了!这几位小学生竟然在艺术界掀起一阵风暴,简直是灵魂画手无疑.........