历届试题 青蛙跳杯子-(bfs)
题目:http://lx.lanqiao.cn/problem.page?gpid=T448
题意:有两个字符串例如*WWBB和WWBB*,*每次能往左或右跳1-3步,与原位置的字符交换,问最少步数跳到第二个字符串的状态。
bfs裸题,C++能秒杀,改用java做题倒是折腾了挺久,测试了HashMap和LinkedList的用法,第一次提交超时,看别人代码后修正。
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Scanner; public class Main{ public static void main(String[] args) {
LinkedList<Node> que=new LinkedList<Node>();
HashMap<String, Integer> map=new HashMap<String, Integer>();
Scanner scan=new Scanner(System.in);
String s1=scan.next();
String s2=scan.next();
int len=s1.length();
map.put(s1, 0);
int ans=0;
Node start=new Node();
start.s=s1;start.x=s1.indexOf("*");start.t=0;
que.add(start);
while(!que.isEmpty()) {
Node now=que.getFirst();
String nows=now.s;
que.pop();
int nowx=now.x;//此时*的位置,准备跳到xx的位置
if(nows.equals(s2)) {
ans=now.t;
break;
}
for(int i=-3;i<=3;i++){//6种跳法
int xx=nowx+i;//xx是*要跳到的下标的位置
if(i!=0 && xx>=0 && xx<len) {//判断不越界
String next;
char c[]=nows.toCharArray();//用char数组转换满分过,484ms
c[nowx]=c[xx];
c[xx]=nows.charAt(nowx);
next=new String(c);
/* String指定字符交换部分的代码,超时83分。
if(i<0) {//*往左移动
if(nowx==(len-1))//*在最右边
next=nows.substring(0, xx)+"*"+nows.substring(xx+1,nowx)+temp;
else
next=nows.substring(0, xx)+"*"+nows.substring(xx+1,nowx)+temp+nows.substring(nowx+1,len);
}else {//*往右跳移动
if(xx==(len-1))//跳到最右边
next=nows.substring(0,nowx)+temp+nows.substring(nowx+1, xx)+"*";
else
next=nows.substring(0,nowx)+temp+nows.substring(nowx+1, xx)+"*"+nows.substring(xx+1,len);
}*/
if(map.containsKey(next)==false) {//没有跳到此状态过
map.put(next, 1);//标记
Node node=new Node();
node.s=next;
node.x=xx;
node.t=now.t+1;
que.add(node);
}
}
}
}
System.out.println(ans);
}
} class Node{
String s;
int x;//* 的位置
int t;//步数
}
历届试题 青蛙跳杯子-(bfs)的更多相关文章
- [蓝桥杯2017初赛]青蛙跳杯子 BFS
题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...
- Java实现第八届蓝桥杯青蛙跳杯子
青蛙跳杯子 题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里 ...
- [蓝桥杯]PREV-44.历届试题_青蛙跳杯子
问题描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...
- 蓝桥-青蛙跳杯子(bfs)
问题描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...
- BFS(广度优先搜索遍历保存全局状态,华容道翻版做法)--08--DFS--蓝桥杯青蛙跳杯子
题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...
- 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
- 【剑指Offer】面试题10- II. 青蛙跳台阶问题
题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返 ...
- 力扣题解-面试题10- II. 青蛙跳台阶问题
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008, ...
- 剑指offer 面试题10.1:青蛙跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果). 编程思想 对于本题,前提只有 一次 1阶或者2阶的跳法.a.如果两种跳 ...
随机推荐
- 腾讯云服务器centos7.2+nginx(开启gzip压缩)+uwsgi+Django+react
因为项目原因,学习了react,Django,完成react开发项目过后,打包(做好了代码分割.压缩)放入Django中,在本地运行速度很快,结果放到服务器中,虽然某些js文件很小(只有一百多kb), ...
- 【STM32H7教程】第25章 STM32H7的TCM,SRAM等五块内存基础知识
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第25章 STM32H7的TCM,SRAM等五块内 ...
- CodeForces 200D Programming Language
Recently, Valery have come across an entirely new programming language. Most of all the language att ...
- Elastic:用Docker部署Elastic栈
安装 因为我们需要使用docker来进行安装,我们必须安装: docker:根据不同的操作系统,请按照要求安装docker.可以到网站https://docs.docker.com/去安装 docke ...
- 安装keepalived OpenSSL is not properly installed on your system. !!!
错误信息: configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not includ ...
- ASP.NET MVC IOC 之 Autofac(一)
新建一个MVC项目,如 AutoFacTest,引用autofac,如下图: 接下来就是开始进行编程了 首先,新建一个类库,名为 AutoFacTest.Service,该类库编写服务层代码,我们的接 ...
- 表达式树练习实践:C#判断语句
目录 表达式树练习实践:C#判断语句 if if...else switch ?? 和 ?: 表达式树练习实践:C#判断语句 判断语句 C# 提供了以下类型的判断语句: 语句 描述 if 一个 if ...
- l浏览器执行JS
浏览器执行JS 浏览器分成两部分:渲染引擎和JS引擎 渲染引擎:用来解析HTML与CSS,俗称内核,比如chrome浏览器的blink,老版本的webkit JS引擎:俗称JS解析器.用来读取网页中的 ...
- layui常用的验证
var LayVerifyExtend = { notnullNonnegativeInteger: function (value, item) { //value:表单的值.item:表单的DOM ...
- python中字符串
字符串:可用单引号 双引号 三引号 来表示 可用来定义国籍,姓名,家庭住址等选项:#.join 把可迭代的对象转化成字符串 (字符串,列表,元组,字典等),列表 元组 合并为字符串,字典合并的是key ...