[蓝桥杯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…

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

点击上方蓝字关注我们西安卓华联盛科技有限公司公司简介&#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…

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 (((…

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

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

abp vnext2.0核心组件之DDD组件之实体结构源码解析

接着abp vnext2.0核心组件之模块加载组件源码解析和abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析集合.Net Core3.1,基本环境已经完备,接下去就是构建领域层,vnext整个领域层大致分为聚合根、实体、值对象、事件实体、仓储、服务等等,内容较多,所以我打算分…

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

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

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

数据结构—Kruskal最小生成树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 快速排序&#xff1a; #pragma once #define elemType int typedef struct vER {elemType u;elemType v;int weight; }VER; int quickSort(VER a[], int l, int h) {//快速排序int i l, j…