2017蓝桥杯省赛---java---C---9(青蛙跳杯子)

题目描述

题目描述
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 层的新枝,哦,我已是枝繁叶茂。

思路分析

bfs

代码实现

package lanqiao;import java.util.*;public class Main {private static StringBuilder start;private static StringBuilder target;static Set<String> allState=new HashSet<String>();/*** 封装一个持有状态和层次的类*/private static class StateAndLevel{StringBuilder state;int level;int pos;//空杯子的位置public StateAndLevel(StringBuilder state, int level,int pos) {this.state = state;this.level = level;//走的步数this.pos=pos;}@Overridepublic int hashCode() {return state!=null?state.hashCode():0;}@Overridepublic boolean equals(Object o) {if(this==o) return true;if(o==null||getClass()!=o.getClass()) return false;StateAndLevel thar = (StateAndLevel) o;return state!=null?state.toString().equals(thar.state.toString()):thar.state==null;}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);start = new StringBuilder(scanner.nextLine());target = new StringBuilder(scanner.nextLine());bfs();}private static void bfs() {/*初始状态加入队列*/Queue<StateAndLevel> q=new LinkedList<>();q.add(new StateAndLevel(start, 0, start.indexOf("*")));allState.add(start.toString());/*不定的弹出对手,一步烟花成相邻状态,加入队列(判重)*/while (!q.isEmpty()){StateAndLevel front = q.poll();StringBuilder state = front.state;int level = front.level;//和 目标值作比较if (state.toString().equals(target.toString())){System.out.println(level);break;}int pos = front.pos;//可以演化出若干种相邻的状态for (int i = -3; i <= 3; i++) {if(i==0) continue;if(pos+i>=0&&pos+i<state.length()){StringBuilder new_state = new StringBuilder(state);swap(new_state,pos,pos+i);//交换达到新状态if (!allState.contains(new_state)){q.add(new StateAndLevel(new_state, level + 1, pos + i));allState.add(new_state.toString());//放入set}}}}}public static void swap(StringBuilder a,int i,int j){char t=a.charAt(i);a.setCharAt(i,a.charAt(j));a.setCharAt(j,t);}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

青客宝团队redis内部分享ppt

Redis&#xff1a;最好的缓存数据库 说Redis是缓存服务&#xff0c;估计有些人会不开心&#xff0c;因为Redis也可以把数据库持久化&#xff0c;但是在大多数情况Redis的竞争力是提供缓存服务。说到缓存服务必然会想到Memcached&#xff0c;因为几年前Memcached是最流行的缓存服…

你知道面试官是如何刷人的吗

转载自 你知道面试官是如何刷人的吗 对于一个公司来说&#xff0c;执行招聘面试事宜是一个耗时耗钱的项目&#xff0c;从顾问公司和人才中介挑选出合适的简历之后&#xff0c;还要花更多的时间找出合适的候选人。有的时候这些机构会向你保证这些人都是 Java 天才、SQL 专家、…

2020蓝桥杯省赛---java---A---4(七段码)

题目描述 思路分析 代码实现 package lanqiao;public class Main {public static int N10;public static int e[][]new int[N][N];//存储二极管相邻的信息public static int f[]new int[N];//并查集public static int ans0;public static boolean st[]new boolean[N];//true表…

小米无线路由器服务器用户名和密码忘了,小米路由器管理密码忘记了怎么办?...

问&#xff1a;小米路由器管理密码忘记了怎么办&#xff1f;我想修改小米路由器上的配置&#xff0c;在打开miwifi.com的时候&#xff0c;提示需要输入管理密码。但是&#xff0c;我不知道管理密码是多少&#xff0c;忘记了管理密码应该怎么办&#xff1f;答&#xff1a;首先说…

asp.net core源码飘香:Options组件

简介&#xff1a; Options组件是一个小组件&#xff0c;但用的地方很多。它本质是将一个POCO类注册到容器中&#xff08;主要在Startup中作为其他组件的配置功能提供&#xff09;&#xff0c;后续使用的时候就可以通过比如构造函数注入等获取到POCO对象。如果只是为了注入一个P…

DevOps面试问题

转载自 DevOps面试问题 DevOps是一组过程、方法与系统的统称&#xff0c;用于促进开发&#xff08;应用程序/软件工程&#xff09;、技术运营和质量保障&#xff08;QA&#xff09;部门之间的沟通、协作与整合。下面为大家分享DevOps系列的面试问题 持续整合问题 问题一&a…

微软发布ReactXP:方便开发者构建跨平台应用

说起跨平台开发工具&#xff0c;开发者们最先想到的无外乎是 Cordova 和 Xamarin。但是前者无法提供足够令人满意的性能表现&#xff0c;而后者在 Web 开发上心有余而力不足。所以&#xff0c;微软 Skype 团队基于 React JS 和 React Native 开发了一款全新的跨平台开发工具 —…

2020蓝桥杯省赛---java---A---10( 字串排序)

题目描述 思路分析 set去重 代码实现 package lanqiao;import java.util.*; public class Main {public static Set<String> setnew TreeSet<>();public static void main(String[] args) {Scanner scanner new Scanner(System.in);while (scanner.hasNextLine…

这些面试中的智力题,你都会了吗

转载自 这些面试中的智力题&#xff0c;你都会了吗 1. 给一个瞎子52张扑克牌&#xff0c;并告诉他里面恰好有10张牌是正面朝上的。要求这个瞎子把牌分成两堆&#xff0c;使得每堆牌里正面朝上的牌的张数一样多。瞎子应该怎么做&#xff1f; 2. 如何用一枚硬币等概率地产生一…

服务器登陆显示其他用户,连接远程服务器显示其他用户

连接远程服务器显示其他用户 内容精选换一换云服务器网络异常、防火墙未放行本地远程桌面端口、云服务器CPU负载过高等场景均可能导致云服务器无法正常登录。本节操作介绍无法登录Linux弹性云服务器的排查思路。当您的云服务器无法远程登录时&#xff0c;我们建议您首先检查是否…

2019蓝桥杯省赛---java---A---4(迷宫)

题目描述 【问题描述】 下图给出了一个迷宫的平面图&#xff0c;其中标记为 1 的为障碍&#xff0c;标记为 0 的为可以通行的地方。 010000 000100 001001 110000 迷宫的入口为左上角&#xff0c;出口为右下角&#xff0c;在迷宫中&#xff0c;只能从一个位置走到这个它的上、…

面试官最爱问的并发问题

转载自 面试官最爱问的并发问题 在Java相关的岗位面试中&#xff0c;很多面试官都喜欢考察面试者对Java并发的了解程度&#xff0c;而以volatile关键字作为一个小的切入点&#xff0c;往往可以一问到底&#xff0c;把Java内存模型&#xff08;JMM&#xff09;&#xff0c;Jav…

西瓜显示服务器错误,西瓜云服务器

西瓜云服务器 内容精选换一换云服务器组是对云服务器的一种逻辑划分&#xff0c;云服务器组中的弹性云服务器遵从同一策略。当前仅支持反亲和性&#xff0c;即同一云服务器组中的弹性云服务器分散地创建在不同的主机上&#xff0c;提高业务的可靠性。您可以使用云服务器组将业务…

30分钟掌握 C#6

1. 只读自动属性&#xff08;Read-only auto-properties&#xff09; C# 6之前我们构建只读自动属性&#xff1a; public string FirstName { get; private set; } public string LastName { get; private set; } 原理解析&#xff1a;就是编译器在生成set访问器时&#xff0c…

2019蓝桥杯省赛---java---A---6(完全二叉树的权值)

题目描述 思路分析 等差数列 代码实现 package lanqiao;import java.util.*; public class Main {public static void main(final String[] args) {Scanner sc new Scanner(System.in);int nsc.nextInt();int[]numsnew int[n1];long maxSum0;int minDeepInteger.MAX_VALUE;…

如何让面试官认可你的简历

转载自 如何让面试官认可你的简历 在之前的博客里写了很多面试技巧&#xff0c;这是有个前提&#xff1a; 至少候选人被面试了&#xff01; 在这个前提下&#xff0c;候选人哪怕失败了&#xff0c;至少也能用实战来检验和校对面试准备的结果&#xff0c;用句比较时髦的话来…

服务器c盘有个inetpub文件夹,老司机为你示范win10系统C盘inetpub文件夹删不掉的图文教程...

也许大家在用电脑工作的使用中会遇到win10系统C盘inetpub文件夹删不掉的情况&#xff0c;目前就有很多朋友向我资讯关于win10系统C盘inetpub文件夹删不掉的具体处理步骤。小编把总结的关于win10系统C盘inetpub文件夹删不掉的方法了教给大家&#xff0c;只用你按照  1、右键点…

体验VS2017的Live Unit Testing

相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是可以在编写代码的时候进行实时的background的单元测试. 在体验之前,有几点注意事项是需要了解的: 1.目前 live unit tesing仅仅支持 C#和V…

服务器windows系统如何登陆,如何登陆windows云服务器

如何登陆windows云服务器 内容精选换一换远程登录的账号和密码是多少&#xff1f;登录云服务器的用户名和密码&#xff1a;Windows操作系统用户名&#xff1a;AdministratorLinux操作系统用户名&#xff1a;root登录云服务器的用户名和密码&#xff1a;Windows操作系统用户名&a…

2018蓝桥杯省赛---java---B---8(日志统计)

题目描述 小明维护着一个程序员论坛。现在他收集了一份"点赞"日志&#xff0c;日志共有N行。其中每一行的格式是&#xff1a; ts id 表示在ts时刻编号id的帖子收到一个"赞"。 现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长…