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

在这里插入图片描述

解题思路:
这题如果我们考虑蚱蜢跳,有很多蚱蜢,有很多情况,所以我们让空盘跳,这样就简化题目了,然后我们化圆为直,将题目的情况看成字符串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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10玩cf不能全屏_如何优化Win10游戏流畅运行?Win10游戏流畅运行优化教程

很多小伙伴们在安装了win10操作系统之后&#xff0c;运行游戏的过程中可能就会遇到游戏卡顿不流畅的情况。如何优化Win10游戏流畅运行&#xff1f;在这里小编为大家准备了一些解决游戏卡顿的小妙招&#xff0c;一起看下吧~如何优化Win10游戏流畅运行一. 关闭nagle算法很多人对于…

数据结构---邻接表的DFS

数据结构—邻接表的DFS 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define typeNode int //每个头结点的标识数据类型 #define N 100 //最大结点数 int degree[N]; int result[N]; bool visited[N]; typedef str…

简化MVVM属性设置和修改 - .NET CORE(C#) WPF开发

阅读导航常用类属性设置、获取方式二次封装 INotifyPropertyChangedDemo 展示、源码下载1. 常用类属性设置、获取方式public class Student : INotifyPropertyChanged {private string name;public string Name{get { return name; }set{if(name ! value){name value;OnProper…

[蓝桥杯2017初赛]青蛙跳杯子-map标记+bfs

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

李洪超 硬件工程师_西安职位|各类工程师,软件开发等多岗位招募,轻松月入过万,全程视频面试...

点击上方蓝字关注我们西安卓华联盛科技有限公司公司简介&#xff1a; 深圳市卓翼科技股份有限公司(以下简称“卓翼科技”)创始于2004年&#xff0c;2010年3月在深交所挂牌上市(证券代码&#xff1a;002369)。卓翼科技专业从事通讯、计算机、消费类电子等产品的研发、制造与销售…

word List 08

word List 08 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

云原生 - Istio可观察性之分布式跟踪(三)

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

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

法一: 代码如下&#xff1a; #include <iostream> using namespace std; const int N 15; bool st[N]; int a[N];void dfs(int u) {if (u 11) {if ((((a[1] * 1000 a[2] * 100 a[3] * 10 a[4]) - (a[5] * 1000 a[6] * 100 a[7] * 10 a[8])) * (a[9] *10 a[10])…

electron ant-design-vue 不能用_基于 Electron 桌面消息管理客户端iGot

今天给小伙伴们分享一个超棒的Electron聚合消息管理器Electron-iGot。electron-igot 一款汇聚微信、邮箱、App消息推送的桌面管理客户端。支持推送消息实时提醒及管理。用途用于短信转发&#xff1b;服务器进程监听、内存/CPU预警监测&#xff1b;项目业务的提醒&#xff1b;..…

数据结构---邻接矩阵的BFS

数据结构—邻接矩阵的BFS 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 队列代码&#xff1a; #pragma once #define elemType int #define N 100 #include<stdlib.h> typedef struct dQueue {int data;struct dQueue* next; }dQueue; typedef struct queue {d…

WTM系列视频教程:CodeFirst

WTM系列视频教程第二章&#xff1a;CodeFirst文字摘要&#xff1a;“群里好多人质疑我啊&#xff0c;说你刚40&#xff0c;哪来的30年开发经验。我解释一下啊&#xff0c;我是8岁开始接触编程&#xff0c;学习的第一个语言是basic&#xff0c;用的苹果电脑&#xff0c;不是你们…

总结定时器设计方法_钢结构刚性固定钢柱脚设计方法总结,看完不仅懂操作,还懂了原理...

一、钢柱柱脚形式的分类刚性固定柱脚&#xff1a;1)埋入式柱脚&#xff1b;2)外包式柱脚&#xff1b;3)插入式柱脚&#xff1b;铰接柱脚&#xff1a;外露式柱脚&#xff1b;二、埋入式柱脚2.1、基本概念&#xff1a;所谓埋入式柱脚是指将钢柱底端直接埋入混凝土基础筏板、地基梁…

数据结构---邻接表的BFS

数据结构—邻接表的BFS 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 队列代码&#xff1a; #pragma once #define elemType int #define N 100 #include<stdlib.h> typedef struct dQueue {int data;struct dQueue* next; }dQueue; typedef struct queue {dQu…

华硕主板开机只进入Bios模式不进入Windows系统

华硕电脑进入bios界面解决办法 1.可以按平常方法多重启几下&#xff08;bios界面按f10确认保存&#xff09; 2.是固态硬盘的地方看看是否有松动 插回去就可以了3.图形界面bios先按f7进入高级模式&#xff0c;【security】菜单&#xff0c;通过方向键选择【secure Boot】选项&am…

[蓝桥杯2017初赛]Excel地址

题目描述 Excel单元格的地址表示很有趣&#xff0c;它使用字母来表示列号。 比如&#xff0c;A表示第1列&#xff0c;B表示第2列&#xff0c;Z表示第26列&#xff0c;AA表示第27列&#xff0c;AB表示第28列&#xff0c;BA表示第53列&#xff0c;… 当然Excel的最大列号是有限度…

abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析

老版Abp对Castle的严重依赖在vnext中已经得到了解决,vnext中DI容器可以任意更换,为了实现这个功能,底层架构相较于老版abp,可以说是进行了高度重构.当然这得益于.Net Core的DI容器组件本身的优势.接着abp vnext2.0核心组件之模块加载组件源码解析 上文,上文中我跳过了DI切换这个…

安卓listview下拉刷新_安卓QQ内测教学,保证不让你走弯路

本文章为安卓QQ内测资格获取教程&#xff0c;仅针对安卓用户&#xff0c;苹果手机我暂无渠道。安卓QQ用户不可直接安装测试版QQ&#xff0c;否则会被强制退出&#xff0c;也无法回退旧版本&#xff0c;只能卸载重新安装旧版本。切记&#xff0c;切记&#xff0c;一定现申请资格…

数据结构---prim最小生成树

数据结构—prim最小生成树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 #define elemType int //const int MAX_INT (1 << 31) - 1; //const int MAX_INT 0X7fffffff; #define INF (((…

洛谷P2884 [USACO07MAR]Monthly Expense S

题目描述 Farmer John is an astounding accounting wizard and has realized he might run out of money to run the farm. He has already calculated and recorded the exact amount of money (1 ≤ moneyi ≤ 10,000) that he will need to spend each day over the next N…

c++中计算2得n次方_七上,一元一次方程,知识点综合学霸笔记在手

一元一次方程的解定义&#xff1a;使一元一次方程左右两边相等的未知数的值叫做一元一次方程的解&#xff0e;把方程的解代入原方程&#xff0c;等式左右两边相等&#xff0e;解一元一次方程(1)解一元一次方程的一般步骤&#xff1a;去分母、去括号、移项、合并同类项、系数化为…