历届试题 青蛙跳杯子-(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.如果两种跳 ...
随机推荐
- springmvc 什么时候 set applicationContext 到 ServletConfig 的?
springmvc 什么时候 set applicationContext 到 ServletConfig 的? FrameworkServlet --> initWebApplicationC ...
- Java入门程序HelloWorld
程序开发步骤说明 开发环境已经搭建完毕,可以开发我们第一个Java程序了.Java程序开发三步骤:编写.编译.运行.如下图所示 详解: 编写源程序:通俗来说就是我们通过Java的语法自己写的代码 编译 ...
- vue中is的使用
:is作用 1.动态切换不同组件 <div id="app"> <button @click="changeComponent('component1' ...
- shell 下
一句话来概括shell shell是一个基于Linux内核和应用程序之间的一个解释器 Shell解释器 /bin/sh /bin/bash 目前多用的是bash /sbin/ ...
- CF1244F Chips
题目链接 problem 有一个长度为\(n\)个点连成的环.每个点为黑色或白色.当一个点和与他相邻的两个点颜色不同时.该点的颜色就会改变. 问改变\(K\)次后每个点的颜色. solution 发现 ...
- golang--redis连接池
通过golang对redis操作,还可以通过redis连接池,流程如下: (1)事先初始化一定数量的连接,投入到连接池: (2)当go需要操作redis时,直接从连接池取出连接即可: (3)这样可以节 ...
- Java连载52-单例模式的缺点以及抽象类
一.单例模式 1.单例模式的缺点:单例模式的类型没有子类,无法被继承. 例如:下面的例子,由于父类的构造方法是私有的,所以子类中的构造方法是无法创建的,因为它是引用父类的构造方法 package co ...
- Kettle在windows上安装
Kettle是一款国外开源的ETL工具,纯java编写,可以在Windows.Linux.Unix上运行,数据抽取高效稳定. 因为有个日常提数,工作日每天都要从数据库中提取数据,转换为excel,再以 ...
- [06]ASP.NET Core中的进程内(InProcess)托管
ASP.NET Core 进程内(InProcess)托管 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自<从零开始学 ...
- tornado中传递参数的几种方式
方法一 :tornado路由可以使用正则表达式中的子表达式传递url参数.比如:(r"/member//(\w*)/([01]*)", MemberHandler)匹配以后,tor ...