为什么第二题就这么难呜呜呜,这不是为难我吗!!!

可以明确的是,又是一个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跳蚱蜢的更多相关文章

  1. 蓝桥杯 跳蚱蜢 (bfs)

    转载自:https://blog.csdn.net/wayway0554/article/details/79715658 本题的解题关键就在于将蚱蜢在跳转换为盘子在跳. 当使用string当做每一个 ...

  2. [蓝桥杯2017初赛]跳蚱蜢 BFS

    题目描述 如图所示: 有9只盘子,排成1个圆圈.其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8.每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空 ...

  3. 2016蓝桥杯省赛C/C++A组第二题 跳蚱蜢

    题意:有9只盘子,排成1个圆圈.  其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8 每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空盘中.  请 ...

  4. (蓝桥杯)第八届A组C/C++跳蚱蜢

    #include<iostream> #include<memory.h> #include<stack> #include<string> #incl ...

  5. 2017第八届蓝桥杯C/C++语言A组

    一:题目: 标题:迷宫 X星球的一处迷宫游乐场建在某个小山坡上.它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母.我们假设玩家是面朝上坡的方向站立,则:L表示走到左边的房间,R ...

  6. a标签点击跳转失效--IE6、7的奇葩bug

    一般运用a标签包含img去实现点击图片跳转的功能,这是前端经常要用到的东西. 今天遇到个神奇的bug:如果在img上再包裹一层div,而且div设置了width和height,则图片区域点击时,无任何 ...

  7. nginx配置反向代理或跳转出现400问题处理记录

    午休完上班后,同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...

  8. 移动端访问PC站点时自动跳转至移动站点

    方法一: 百度Site APP的uaredirect.js 实现手机访问,自动跳转 <script src="http://siteapp.baidu.com/static/webap ...

  9. 【HTML】Html页面跳转的5种方式

    目录结构: // contents structure [-] html实现 javascript方式实现 结合了倒数的javascript实现(IE) 解决Firefox不支持innerText的问 ...

随机推荐

  1. Elasticsearch从入门到放弃:分词器初印象

    Elasticsearch 系列回来了,先给因为这个系列关注我的同学说声抱歉,拖了这么久才回来,这个系列虽然叫「Elasticsearch 从入门到放弃」,但只有三篇就放弃还是有点过分的,所以还是回来 ...

  2. 基础-Junit单元测试_反射_注解

    一.Junit单元测试 1.1 测试分类: 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 白盒测试:需要写代码的.关注程序具体的执行流程. 1.2 Junit使用(白盒测试) 使用步 ...

  3. docker容器化python服务部署(supervisor-gunicorn-flask)

    docker容器化python服务部署(supervisor-gunicorn-flask) 本文系作者原创,转载请注明出处: https://www.cnblogs.com/further-furt ...

  4. C语言学习笔记第一章——开篇

    本文章B站有对应视频 (本文图片.部分文字引用c primer plus) 什么是C语言 顾名思义,c语言是一门语言,但是和我们所讲的话不同,它是一门编程语言,是为了让机器可以听懂人的意思所以编写的一 ...

  5. directive 实例讲解

    http://my.oschina.net/ilivebox/blog/289670 gulp-nodemon http://www.zhihu.com/question/32123388?sort= ...

  6. day52 html进阶

    目录 一.分组与嵌套 二.伪类选择器 三.伪元素选择器 四.选择器优先级 五.css属性相关 1 字体属性 2 文字属性 3 背景图片 4 边框 5 display属性 6 盒子模型 7 浮动 一.分 ...

  7. Scala 基础(三):Scala语言快速开发入门

    1.Scala执行流程分析 2.Scala程序开发注意事项(重点) Scala源文件以 “.scala" 为扩展名. Scala程序的执行入口是main()函数. Scala语言严格区分大小 ...

  8. Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

    Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...

  9. day7:字符串的操作/方法&字符串的格式化format&列表的操作

    字符串的相关操作 1.字符串的拼接 strvar = "vegeta"+"ble" print(strvar) # vegetable 2.字符串的重复 str ...

  10. Go的100天之旅-02基本语法

    基本语法 Go关键字 下面是Go的25个关键字: break default func interface select case defer go map struct chan else goto ...