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

可以明确的是,又是一个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. python字符串与文本操作(一)

    1.一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定的 #string 对象的split()方法只适应于非常简单的字符串分割情形,它并不允许有 多个分隔符或者是分隔符周围不确定的空 ...

  2. JavaScript动画实例:递归分形图动态展示

    在“JavaScript图形实例:SierPinski三角形” 和“JavaScript图形实例:Levy曲线及其变形”等文章中我们介绍了通过递归生成分形图形的方法.我们可以将绘制的分形图形每隔一定的 ...

  3. 从零开始实现multipart/form-data数据提交

    在HTTP服务应用中进行数据提交一般都使用application/json,application/x-www-form-urlencoded和multipart/form-data这几种内容格式.这 ...

  4. 521我发誓读完本文,再也不会担心Spring配置类问题了

    当大潮退去,才知道谁在裸泳.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...

  5. java 基本语法(十八)Lambda (五)Stream API

    1.Stream API的理解:1.1 Stream关注的是对数据的运算,与CPU打交道集合关注的是数据的存储,与内存打交道 1.2 java8提供了一套api,使用这套api可以对内存中的数据进行过 ...

  6. Mariadb之主从复制的读写分离

    首先我们来回顾下代理的概念,所谓代理就是指的是一端面向客户端,另外一端面向服务端,代理客户端访问服务端,我们把这种代理叫正向代理:代理服务端响应客户端我们叫做反向代理,这个我们在之前nginx系列博客 ...

  7. 你应该知道的ip地址相关知识

    IP地址是一个网卡在网络世界里的通讯地址,相当于我们家里的门牌号码.这样类比的话,很显然ip地址是唯一的.在windows系统中,我们可以使用 ipconfig 命令查看本机的ip地址相关信息: 图中 ...

  8. css换行后缩进,css缩进技巧

    一般情况下像下图这样需要缩进的,一般都会外面一个div里面两块需要两个div然后用定位或者flex.table.浮动后设置宽度等来实现 已知宽度的情况下上面列的方法都适用 不知宽度的情况下可以用fle ...

  9. 使用位运算、值交换等方式反转java字符串-共四种方法

    在本文中,我们将向您展示几种在Java中将String类型的字符串字母倒序的几种方法. StringBuilder(str).reverse() char[]循环与值交换 byte循环与值交换 apa ...

  10. Ethical Hacking - NETWORK PENETRATION TESTING(16)

    ARP Poisoning - MITMf MITMf is a framework that allows us to launch a number of MITM attacks. MITMf ...