青蛙跳杯子

题目描述
X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。
X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。
如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。 *WWWBBB 其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。 X星的青蛙很有些癖好,它们只做3个动作之一:
1. 跳到相邻的空杯子里。
2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。
3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。 对于上图的局面,只要1步,就可跳成下图局面: WWW*BBB 本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。 输入为2行,2个串,表示初始局面和目标局面。
输出要求为一个整数,表示至少需要多少步的青蛙跳。 例如:
输入:
*WWBB
WWBB* 则程序应该输出:
2 再例如,
输入:
WWW*BBB
BBB*WWW 则程序应该输出:
10 我们约定,输入的串的长度不超过15 资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
不要使用package语句。不要使用jdk1.7及以上版本的特性。
主类的名字必须是:Main,否则按无效代码处理。 ---------------------------- 笨笨有话说:
我梦见自己是一棵大树,
青蛙跳跃,
我就发出新的枝条,
春风拂动那第 5 层的新枝,
哦,我已是枝繁叶茂。
package 第三次线下模拟;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner; public class 青蛙跳杯子 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String start = sc.next();
String end = sc.next();
sc.close();
Map<String, Boolean> map = new HashMap<String, Boolean>();
Queue<Node> queue = new LinkedList<Node>();
queue.add( new Node(start,0));
map.put(start, true);
while(!queue.isEmpty()){
Node node =queue.poll();
if(node.str.equals(end)){
System.out.println(node.step);
return;
}
int step=node.step;
char[] str = node.str.toCharArray();
for (int i = 0; i < str.length; i++) {
if(str[i]!='*'){
for (int j = -3; j <=3; j++) {
if(i+j<0||i+j>=str.length||j==0||str[i+j]!='*') continue;
str=swap(str,i,i+j);
node = new Node(String.valueOf(str),step+1);
if(!map.containsKey(node.str)){
queue.add(node);
map.put(node.str,true);
}
str=swap(str,i,i+j);
}
}
}
} }
public static char[] swap(char[] s,int i,int j){
s[i]^=s[j];
s[j]^=s[i];
s[i]^=s[j]; return s;
}
static class Node{
int step = 0;
String str;
public Node(String str, int step){
this.str = str;
this.step = step;
} }
}
package 第五次模拟;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue; public class Demo9青蛙跳被子 { static String inStr;
static String targetStr;
static List<String> list = new LinkedList<String>();
//使用map来记录,防止循环重复
static Map<String, Boolean> vis = new HashMap<String, Boolean>(); public static void main(String[] args)throws IOException { BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
inStr = bReader.readLine();
targetStr = bReader.readLine();
bReader.close();
System.out.println(bfs()); } public static int bfs (){
//典型的BFS用LinkedList实现Queue
Queue<Node> queue = new LinkedList<Node>();
Node node = new Node(String.valueOf(inStr), 0);
queue.add(node);
// list.add(node.str);
vis.put(node.str, true);
while(queue.size() != 0){
node = queue.poll();
//如果当前字符串和结果相等,直接输出
if(isOk(node.str)){
return node.step;
} char[] str = node.str.toCharArray();
int step = node.step;
for(int i=0; i<str.length; i++){
//如果当前位*,则跳过,我们判断的是青蛙,而不是空杯子
if(str[i] == '*') continue;
for(int j = -3; j<=3; j++){
if(i+j<0 || i+j>=str.length || j==0 || str[i+j] != '*') continue;
//有空杯子就叫唤
str = swap(str, i, j);
//新建node
node = new Node(String.valueOf(str), step+1);
//看以前有没有相同的字符串,如果有只能是循环了,continue
if (!vis.containsKey(node.str)){
//没有就加进去
queue.add(node);
// list.add(node.str);
vis.put(node.str, true);
}
//使用完交换回来
str = swap(str, i, j);
}
} }
//全部循环完,还没有,没结果
return -1;
} public static char[] swap (char[] str, int i, int j){
char tmp = str[i];
str[i] = str[j+i];
str[j+i] = tmp;
return str;
} public static boolean isOk(String str){
if (targetStr.equalsIgnoreCase(String.valueOf(str))){
return true;
} else {
return false;
}
} } class Node{
int step = 0;
String str;
public Node(String str, int step){
this.str = str;
this.step = step;
} }

Java实现第八届蓝桥杯青蛙跳杯子的更多相关文章

  1. BFS(广度优先搜索遍历保存全局状态,华容道翻版做法)--08--DFS--蓝桥杯青蛙跳杯子

    题目描述 X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色. X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去. 如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙 ...

  2. Java实现第八届蓝桥杯购物单

    购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打 ...

  3. java实现第八届蓝桥杯生命游戏

    生命游戏 题目描述 康威生命游戏是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 这个游戏在一个无限大的2D网格上进行. 初始时,每个小方格中居住着一个活着或死了的细胞. 下一时刻每个细胞的 ...

  4. Java实现第八届蓝桥杯国赛 数字划分

    标题:数字划分 w星球的长老交给小明一个任务: 1,2,3-16 这16个数字分为两组. 要求: 这两组数字的和相同, 并且,两组数字的平方和也相同, 并且,两组数字的立方和也相同. 请你利用计算机的 ...

  5. Java实现第八届蓝桥杯图形排版

    标题:图形排版 小明需要在一篇文档中加入 N 张图片,其中第 i 张图片的宽度是 Wi,高度是 Hi. 假设纸张的宽度是 M,小明使用的文档编辑工具会用以下方式对图片进行自动排版: 1. 该工具会按照 ...

  6. Java实现第八届蓝桥杯魔方状态

    魔方状态 题目描述 二阶魔方就是只有2层的魔方,只由8个小块组成. 如图p1.png所示. 小明很淘气,他只喜欢3种颜色,所有把家里的二阶魔方重新涂了颜色,如下: 前面:橙色 右面:绿色 上面:黄色 ...

  7. Java实现第八届蓝桥杯兴趣小组

    兴趣小组 为丰富同学们的业余文化生活,某高校学生会创办了3个兴趣小组 (以下称A组,B组,C组). 每个小组的学生名单分别在[A.txt],[B.txt]和[C.txt]中. 每个文件中存储的是学生的 ...

  8. Java实现第八届蓝桥杯外星日历

    外星日历 题目描述 某星系深处发现了文明遗迹. 他们的计数也是用十进制. 他们的文明也有日历.日历只有天数,没有年.月的概念. 有趣的是,他们也使用了类似"星期"的概念, 只不过他 ...

  9. Java实现第八届蓝桥杯正则问题

    正则问题 考虑一种简单的正则表达式: 只由 x ( ) | 组成的正则表达式. 小明想求出这个正则表达式能接受的最长字符串的长度. 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是 ...

随机推荐

  1. 安装laravel环境之homestead(for mac)

    1.先下载virtualbox + vagrant 2.执行命令 vagrant box add laravel/homestead 3.新建一个空文件夹,在里面下载代码.我是放在当前用户下的新建的W ...

  2. tp5.1的事务操作

    普通的事务操作很简单,最简单的方式是使用 transaction 方法操作数据库事务, 当闭包中的代码发生异常会自动回滚, 例如: Db::transaction(function () { Db:: ...

  3. 移动端APP自动化测试超全基础汇总

    目录 一.面试过程 1.自动化岗位要求 2.面试流程,面试类型 3.沟通技巧,不同级别要求 二.真实面试案例 1.一个输入框的面试题(有人拿到高级岗位,有人连初级都没拿到,为什么) 三.自我分析 1. ...

  4. 8、HTTPS证书Actions无法导出问题

    前言 在点Actions时候出现Export Failed:The root certificate could not be located.最近有很多小伙伴在fiddler导出证书的时候,遇到无法 ...

  5. sound of the genuine

    “There is something in every one of you that waits and listens for the sound of the genuine in yours ...

  6. [Unity UGUI序列帧]简单实现序列帧的播放

    在使用序列帧之前需要准备好序列帧的图集,打图集的操作参考 [Unity UGUI图集系统]浅谈UGUI图集使用 准备好序列帧图集,序列帧的播放原理就是获取到图集中的所有图片,然后按照设置的速度按个赋值 ...

  7. DRF节流组件

    1.DRF节流组件自定义(限制访问频率)  方式一 自定义类和方法: 和上述的认证组件使用方式一样,定义一个频率组件类,推荐继承BaseThrottle类, 需定义defallow_request(s ...

  8. 14.4 Go Xorm

    14.4 Go Xorm 获取xorm go get -u -v github.com/go-xorm/xorm xorm增删改查 /** * 应用程序 * 同目录下多文件引用的问题解决方法: * h ...

  9. 第四篇:NLP(Natural Language Processing)自然语言处理

    NLP自然语言处理: 百度AI的 NLP自然语言处理python语言--pythonSDK文档: https://ai.baidu.com/docs#/NLP-Python-SDK/top 第三方模块 ...

  10. MongoDB启动闪退问题完美解决

    如果你看到这篇文章,说明你也遇到了启动MongoDB闪退的情况.由于只是学习MongoDB,所以很多人不想使用MongoDB的安装版,而使用免安装版.但是在启动mongod.exe 的时候,就会出现闪 ...