LQB2017A02跳蚱蜢


为什么第二题就这么难呜呜呜,这不是为难我吗!!!
可以明确的是,又是一个bfs
最少路径,找满足条件的那个层数
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include <strings.h>
#include <queue>
#include <set>
#include <cstring> using namespace std;
char *start="";
char *target=""; struct StateAndLevel{
char *state;
int level;
int pos0;//记录0的位置
StateAndLevel(char *_state,int _level,int _pos0):state(_state),level(_level),pos0(_pos0){};//构造函数
}; void swap(char *s,int a,int b) {
char t=s[a];
s[a]=s[b];
s[b]=t;
}
struct cmp{
bool operator ()(char *a,char *b){
return strcmp(a,b)<; }
};
queue<StateAndLevel> q; set<char *,cmp> allState;//set需要重载一下()运算符:set是用来去重的,但是你得定义啥是重复啊 void addN(char *state,int pos,int newpos,int le){ //添加其他队列成员
char *new_state1 = (char *) malloc( * sizeof(char));
strcpy(new_state1, state);//把原字符串拷贝过来,然后进行改变
//首先寻找一下合适的位置 //移动字符以形成新的字符串
swap(new_state1, pos, newpos);
//将改变后的字符插入到set和queue里,注意需要判断是否重复
if (allState.find(new_state1) == allState.end()) {
allState.insert(new_state1);
q.push(StateAndLevel(new_state1, le + , newpos));//注意你现在操作的是sal的成员
}
} int main() {
q.push(StateAndLevel(start, , ));//先把初始的放进去
while (!q.empty())//套路!!!
{
StateAndLevel sal = q.front(); char *state = sal.state;
int le = sal.level;
cout<<le<<" "<<endl;
if (strcmp(state, target) == ) {
cout << le;
return ;
}
int pos = sal.pos0;//取出所有的当前值,添加到set中去
allState.insert(state); int newpos = (pos + + ) % ;
addN(state, pos, newpos, le); int newpos2 = (pos - + ) % ;
addN(state, pos, newpos2, le); int newpos3 = (pos - + ) % ;
addN(state, pos, newpos3, le); int newpos4 = (pos + + ) % ;
addN(state, pos, newpos4, le);
q.pop(); } }
那个add函数,
就是生成一个新的位置,
更改出那个新的字符
然后level+1
其实用bfs搞最小挺常见的emmmmmm
LQB2017A02跳蚱蜢的更多相关文章
- 蓝桥杯 跳蚱蜢 (bfs)
转载自:https://blog.csdn.net/wayway0554/article/details/79715658 本题的解题关键就在于将蚱蜢在跳转换为盘子在跳. 当使用string当做每一个 ...
- [蓝桥杯2017初赛]跳蚱蜢 BFS
题目描述 如图所示: 有9只盘子,排成1个圆圈.其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8.每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空 ...
- 2016蓝桥杯省赛C/C++A组第二题 跳蚱蜢
题意:有9只盘子,排成1个圆圈. 其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8 每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空盘中. 请 ...
- (蓝桥杯)第八届A组C/C++跳蚱蜢
#include<iostream> #include<memory.h> #include<stack> #include<string> #incl ...
- 2017第八届蓝桥杯C/C++语言A组
一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...
- a标签点击跳转失效--IE6、7的奇葩bug
一般运用a标签包含img去实现点击图片跳转的功能,这是前端经常要用到的东西. 今天遇到个神奇的bug:如果在img上再包裹一层div,而且div设置了width和height,则图片区域点击时,无任何 ...
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- 移动端访问PC站点时自动跳转至移动站点
方法一: 百度Site APP的uaredirect.js 实现手机访问,自动跳转 <script src="http://siteapp.baidu.com/static/webap ...
- 【HTML】Html页面跳转的5种方式
目录结构: // contents structure [-] html实现 javascript方式实现 结合了倒数的javascript实现(IE) 解决Firefox不支持innerText的问 ...
随机推荐
- 初探numpy——广播和数组操作函数
numpy广播(Broadcast) 若数组a,b形状相同,即a.shape==b.shape,那么a+b,a*b的结果就是对应数位的运算 import numpy as np a=np.array( ...
- CF 1912 A NEKO's Maze Game
题目传送门 题目描述 输入 输出 样例 样例输入 样例输出 Yes No No No Yes 一句话题意:2*n的迷宫,从(1,1)出发到(2,n),初始时全部的都是地面,每次询问会把一个地面给变成熔 ...
- 权益质押(Staking):这是关于什么的?
我们最近发表了三篇讲述Fetch.AI分类帐本的文章.这些概述: 我们的权益质押计划的主要特点和验证器的作用 影响我们设计权益质押模型设计的因素 我们的创新共识协议将如何改变用户体验 这些文章包含大量 ...
- 图形处理:给 Canvas 文本填充线性渐变
作者:凹凸曼 - Barrior 在 Canvas 中对文本填充水平或垂直的线性渐变可以轻易实现,而带角度的渐变就复杂很多:就好像下面这样,假设文本矩形宽为 W, 高为 H, 左上角坐标为 X, Y. ...
- Error: error getting chaincode bytes: failed to calculate dependencies报错解决办法
Error: error getting chaincode bytes: failed to calculate dependencies: incomplete package: github.c ...
- Layui数据表格动态加载操作按钮
效果: 方法一:绑定模版选择器 <div class="layui-card"> <div class="layui-card-body layui-r ...
- AbstractQueuedSynchronizer(AQS)抽丝剥茧深入了解JUC框架原理
目录 简介 Lock简单实用 主体框架 原理解析 独占锁 AQS数据结构 CLH数据结构 acquire实现步骤 addWaiter acquireQueued shouldParkAfterFail ...
- 终于理解Python中的迭代器和生成器了!
迭代器和生成器 目录 迭代器和生成器 可迭代对象和迭代器 基础概念 判断 for循环本质 不想用for循环迭代了,如何使用迭代器? 列表推导式 生成器Generator 概念 如何实现和使用? 生成器 ...
- Pop!_OS安装与配置(四):GNOME插件篇
Pop!_OS安装与配置(四):GNOME插件篇 #0x0 效果图 #0x1 自动安装(不保证成功性) #0x2 OpenWeather #0x3 Topicons Plus #0x4 System- ...
- 数据可视化之DAX篇(五) 使用PowerBI的这两个函数,灵活计算各种占比
https://zhuanlan.zhihu.com/p/57861350 计算个体占总体的比例是一个很常见的分析方式,它很简单,就是两个数字相除,但是当需要计算的维度.总体的范围发生动态变化时,如何 ...