蓝桥杯2013决赛JAVA本科B组试题

合集下载

java蓝桥杯b组题目

java蓝桥杯b组题目

java蓝桥杯b组题目摘要:1.蓝桥杯B 组题目概述2.蓝桥杯B 组题目的类型3.如何准备蓝桥杯B 组题目4.总结正文:【蓝桥杯B 组题目概述】蓝桥杯是中国的一项全国性计算机科学比赛,每年举办一次。

该比赛旨在发掘和培养高中和大学生的计算机科学和信息技术方面的才能。

蓝桥杯B 组是针对高中生举办的比赛,参赛选手需要通过地区赛、省赛等多个层次的选拔,最终进入全国总决赛。

蓝桥杯B 组题目是比赛的重要组成部分,题目内容涵盖了计算机科学的各个领域,如算法与数据结构、计算机网络、数据库、操作系统等。

【蓝桥杯B 组题目的类型】蓝桥杯B 组题目分为两种类型:个人赛题目和团队赛题目。

个人赛题目是针对单个选手进行的比赛,要求选手在规定时间内独立完成一个计算机程序,并满足题目要求。

团队赛题目则是由3 名选手组成的团队共同完成一个计算机程序,并满足题目要求。

两种类型的题目都注重考察选手的编程能力和解决实际问题的能力。

【如何准备蓝桥杯B 组题目】准备蓝桥杯B 组题目需要掌握一定的计算机科学基础知识,包括算法与数据结构、计算机网络、数据库、操作系统等方面的知识。

此外,还需要进行大量的编程练习,提高编程能力和解决实际问题的能力。

具体的准备方法包括:1.学习计算机科学基础知识,了解计算机编程的基本思想和方法。

2.练习编写算法和数据结构,掌握常用的算法和数据结构,如排序算法、查找算法、树、图等。

3.熟悉计算机编程语言,如C++、Java 等,熟练掌握编程语言的基本语法和常用函数库。

4.进行模拟练习,模拟蓝桥杯比赛的形式和要求,提高自己的应变能力和抗压能力。

【总结】蓝桥杯B 组题目是高中生参加的一项重要的计算机科学比赛,考察选手的编程能力和解决实际问题的能力。

蓝桥杯javaB组--人物相关性分析

蓝桥杯javaB组--人物相关性分析

蓝桥杯javaB组--⼈物相关性分析【问题描述】⼩明正在分析⼀本⼩说中的⼈物相关性。

他想知道在⼩说中 Alice 和 Bob有多少次同时出现。

更准确的说,⼩明定义 Alice 和 Bob“同时出现”的意思是:在⼩说⽂本中 Alice 和 Bob 之间不超过 K 个字符。

例如以下⽂本:This is a story about Alice and Bob. Alice wants to send a private message to Bob.假设 K=20,则 Alice 和 Bob 同时出现了 2 次,分别是”Alice and Bob”和”Bob. Alice”。

前者 Alice 和 Bob 之间有 5 个字符,后者有 2 个字符。

注意:1. Alice 和 Bob 是⼤⼩写敏感的,alice 或 bob 等并不计算在内。

2. Alice 和 Bob 应为单独的单词,前后可以有标点符号和空格,但是不能有字母。

例如 Bobbi 並不算出现了 Bob。

【输⼊格式】第⼀⾏包含⼀个整数 K。

第⼆⾏包含⼀⾏字符串,只包含⼤⼩写字母、标点符号和空格。

长度不超过 1000000。

【输出格式】输出⼀个整数,表⽰ Alice 和 Bob 同时出现的次数。

【样例输⼊】20This is a story about Alice and Bob. Alice wants to send a private message to Bob.试题H: ⼈物相关性分析 12第⼗届蓝桥杯⼤赛软件类省赛 Java ⼤学 B 组【样例输出】2【评测⽤例规模与约定】对于所有评测⽤例,1 ≤ K ≤ 1000000。

import java.util.List;import java.util.ArrayList;import java.util.Scanner;import javax.swing.text.DefaultEditorKit.InsertBreakAction;public class Main{static List<String> list = new ArrayList();//⽤来保存分割后的字符串static List<Integer> art = new ArrayList<>();//记录.出现的位置static int number = 0;public static void print(){for(String b:list){System.out.println(b);}}public static void fun(String string){int count = 0;char crt[] = string.toCharArray();//将字符串转为字符数组for(char b:crt){if(b == ' ')count++;else if(b == '.'){art.add(count);count++;}}}public static void insert()//将'.'插⼊到list中。

【IT专家】第四届全国蓝桥杯软件设计大赛 java软件开发本科B组 题目及答案

【IT专家】第四届全国蓝桥杯软件设计大赛  java软件开发本科B组 题目及答案

第四届全国蓝桥杯软件设计大赛java软件开发本科B组题目及答案2013/05/26 0 1.世纪末的星期 曾有邪教称1999年12月31日是世界末日。

当然该谣言已经不攻自破。

还有人称今后的某个世纪末的12月31日,如果是星期一则会....有趣的是,任何一个世纪末的年份的12月31日都不可能是星期一!!于是,“谣言制造商”又修改为星期日......1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?请回答该年份(只写这个4位整数,不要写12月31等多余信息) 参考代码: import java.util.Calendar;import java.util.Date;public class 世纪末的星期{public static void main(String[] args){for(int i=1999;;i+=100){Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date(i-1900,11,31));if(calendar.get(Calendar.DAY_OF_WEEK)-1==0){System.out.println(i);return;}}}} 标题: 马虎的算式小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。

有一次,老师出的题目是:36 x 495 = ?他却给抄成了:396 x 45 = ?但结果却很戏剧性,他的答案竟然是对的!!因为36 * 495 = 396 * 45 = 17820类这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)能满足形如:ab * cde = adb * ce 这样的算式一共有多少种呢?请你利用计算机的优势寻找所有的可能,并回答不同算式的种类数。

蓝桥杯java历年真题及答案整理(共129道题目及答案)

蓝桥杯java历年真题及答案整理(共129道题目及答案)

1.字符排序算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。

如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。

package Question1_9;import java.util.Scanner;import java.util.Vector;public class Question1 {public static long count=0;private void fullPermutation(Vector<Character>sourse, Vector<Character> result) {if(sourse.size()==0){for (int i = 0; i < result.size(); i++) {System.out.print(result.elementAt(i));}System.out.print("\n");count++;return;}for (int i = 0; i < sourse.size(); i++) {Vector<Character>tsourse=new Vector<Character>(sourse);Vector<Character>tresult=new Vector<Character>(result);tresult.add(sourse.elementAt(i));tsourse.remove(i);new Question1().fullPermutation(tsourse, tresult);}}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();Vector<Character> sourse=new Vector<Character>();Vector<Character> result=new Vector<Character>();for (int i = 0; i < n; i++) {sourse.add((char)('A'+i));}new Question1().fullPermutation(sourse, result);System.out.println(Question1.count);}}方法二:import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedHashSet;import java.util.List;import java.util.Scanner;import java.util.Set;public class Demo03 {// 去掉重复元素,放入lispublic static void removeDuplicate(String s,Set<Character> lis){for(char x:s.toCharArray()){lis.add(x);}}// 为方便操作将sets 转lispublic static void convert(List<Character> lis,Set<Character> sets){Iterator<Character> iter = sets.iterator();while(iter.hasNext()){lis.add(iter.next());}}// 检测符合条件的元素组合public static void check(Set<Character> sets){List<Character> lis = new ArrayList<Character>();convert(lis,sets); // 为方便操作将sets 转lisStringBuffer sb = new StringBuffer();for(int i=0;i<lis.size()-2;i++){for(int j=i+1;j+1<lis.size();j++){ // 向后添加两位,所以j+1<lis.size() for(int k=j+1;k<lis.size();k++){sb.append(lis.get(i));sb.append(lis.get(j));sb.append(lis.get(k));System.out.println(sb); // 输出组合sb.setLength(0); // 清空}}}}public static void main(String[] args){Scanner scan = new Scanner(System.in);System.out.println("输入串(不大于30个字符)。

第六届蓝桥杯大赛个人赛省赛(软件类)Java 大学B组试题

第六届蓝桥杯大赛个人赛省赛(软件类)Java 大学B组试题

第六届蓝桥杯大赛个人赛省赛(软件类)Java 大学B组试题三角形面积如图1所示。

图中的所有小方格面积都是1。

那么,图中的三角形面积应该是多少呢?请填写三角形的面积。

不要填写任何多余内容或说明性文字。

立方变自身观察下面的现象,某个数字的立方,按位累加仍然等于自身。

1^3 = 18^3 = 512 5+1+2=817^3 = 4913 4+9+1+3=17...请你计算包括1,8,17在内,符合这个性质的正整数一共有多少个?请填写该数字,不要填写任何多余的内容或说明性的文字。

三羊献瑞观察下面的加法算式:祥瑞生辉+ 三羊献瑞-------------------三羊生瑞气(如果有对齐问题,可以参看【图1.jpg】)其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。

循环节长度两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。

比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位。

下面的方法,可以求出循环节的长度。

请仔细阅读代码,并填写划线部分缺少的代码。

public static int f(int n, int m){n = n % m;V ector v = new V ector();for(;;){v.add(n);n *= 10;n = n % m;if(n==0) return 0;if(v.indexOf(n)>=0)_______System.out.println(v.indexOf(n))__________________________ ; //填空}}注意,只能填写缺少的部分,不要重复抄写已有代码。

不要填写任何多余的文字。

九数组分数1,2,3...9 这九个数字组成一个分数,其值恰好为1/3,如何组法?下面的程序实现了该功能,请填写划线部分缺失的代码。

java算法第七届蓝桥杯B组(题+答案)9.取球博弈

java算法第七届蓝桥杯B组(题+答案)9.取球博弈

java算法第七届蓝桥杯B组(题+答案)9.取球博弈9.取球博弈 (程序设计)两个⼈玩取球的游戏。

⼀共有N个球,每⼈轮流取球,每次可取集合{n1,n2,n3}中的任何⼀个数⽬。

如果⽆法继续取球,则游戏结束。

此时,持有奇数个球的⼀⽅获胜。

如果两⼈都是奇数,则为平局。

假设双⽅都采⽤最聪明的取法,第⼀个取球的⼈⼀定能赢吗?试编程解决这个问题。

输⼊格式:第⼀⾏3个正整数n1 n2 n3,空格分开,表⽰每次可取的数⽬ (0<n1,n2,n3<100)第⼆⾏5个正整数x1 x2 ... x5,空格分开,表⽰5局的初始球数(0<xi<1000)输出格式:⼀⾏5个字符,空格分开。

分别表⽰每局先取球的⼈能否获胜。

能获胜则输出+,次之,如有办法逼平对⼿,输出0,⽆论如何都会输,则输出-例如,输⼊:1 2 31 2 3 4 5程序应该输出:+ 0 + 0 -再例如,输⼊:1 4 510 11 12 13 15程序应该输出:0 - 0 + +再例如,输⼊:2 3 57 8 9 10 11程序应该输出:+ 0 0 0 0资源约定:峰值内存消耗(含虚拟机) < 256MCPU消耗 < 3000ms1 import java.util.Scanner;23 public class _9取球博弈 {4 public static int [] n = new int[3];5 public static int [] init = new int[5];6 public static int [] end = new int[1000];7 public static char [] sign = {'-','0','0','+'};8 public static void main(String [] args){9 Scanner scan = new Scanner(System.in);10 for(int i = 0; i < 3; i++){11 n[i] = scan.nextInt();12 }13 int Min = Math.min(n[0], Math.min(n[1], n[2]));14 for(int i = 0; i < 5; i++){15 init[i] = scan.nextInt();16 }17 for(int i = 0; i < Min; i++){18 end[i] = 2;19 }20 for(int i = Min; i < end.length; i++){21 int temp = 0;22 for(int j =0; j < 3; j++){23 if(i - n[j] < 0)24 continue;25 else if(end[i-n[j]] == 3){26 if(n[j]%2 != 0)27 temp = 1 > temp ? 1 : temp;28 }29 else if(end[i-n[j]] == 0){30 if(n[j]%2 == 0)31 temp = 3;32 else33 temp = 2 > temp ? 2 : temp;34 }35 else if(end[i-n[j]] == 2){36 if(n[j]%2==0)37 temp = 2 > temp ? 2 : temp;38 else39 temp = 3;40 }41 else if(end[i-n[j]] == 1){42 if(n[j]%2==0)43 temp = 1 > temp ? 1 : temp;44 }45 }46 end[i] = temp;47 }48 for(int i = 0; i < 5; i++){49 System.out.print(sign[end[init[i]]]+" ");50 }51 }52 }(参考⽹上的,没有思路0.0)。

2013第四届蓝桥杯-预赛真题-Java本科-B组考生须知

2013第四届蓝桥杯-预赛真题-Java本科-B组考生须知

第四届“蓝桥杯”全国软件专业人才设计与创业大赛选拔赛Java本科B组考生须知:●考试开始后,选手首先下载题目到本机不被还原的盘符,并使用考场现场公布的解压密码解压试题。

●考试时间为9:00-13:00,共4个小时。

13点整时间截止时,将无法提交答案。

选手因考试结束不能提交答案的,责任由选手自负。

●在考试强制结束前,选手可以主动结束考试(需要身份验证),结束考试后将无法继续提交或浏览答案。

●选手可浏览自己已经提交的答案。

●对同一题目,选手可多次提交答案,以最后一次提交的答案为准。

●选手切勿在提交的代码中书写“姓名”、“考号”,“院校名”等与身份有关的信息或其它与竞赛题目无关的内容,否则成绩无效。

●选手必须通过浏览器方式提交自己的答案。

选手在其它位置的作答或其它方式提交的答案无效。

●试题包含三种类型:“结果填空”、“代码填空”与“程序设计”。

结果填空题:要求参赛选手根据题目描述直接填写结果。

求解方式不限。

不要求源代码。

把结果填空的答案直接通过网页提交即可,不要书写多余的内容,比如:注释说明。

代码填空题:要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。

所填写的代码不超过一条语句(即中间不能出现分号)。

把代码填空的答案(仅填空处的答案,不包括题面已存在的代码)直接通过网页提交即可,不要书写多余的内容,比如:注释或说明文字。

程序设计题目:要求选手设计的程序对于给定的输入能给出正确的输出结果。

考生的程序只有能运行出正确结果,才有机会得分。

注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。

选手的程序必须是通用的,不能只对试卷中给定的数据有效。

所有源码必须在同一文件中。

调试通过后,拷贝提交。

注意:不要使用package语句。

源程序中只能出现JDK1.5中允许的语法或调用。

不能使用1.6或更高版本的特性。

注意:选手代码的主类名必须为:Main,否则会被判为无效代码。

第六届蓝桥杯JavaB组——第3题三羊献瑞(递归全排列)

第六届蓝桥杯JavaB组——第3题三羊献瑞(递归全排列)

第六届蓝桥杯JavaB组——第3题三⽺献瑞(递归全排列)注意点:数字的开头不能为0即可Java代码1package nqiaosix.p3;23/**4 * @Author LZP5 * @Date 2021/3/7 13:296 * @Version 1.07 *8三⽺献瑞910观察下⾯的加法算式:1112祥瑞⽣辉13+ 三⽺献瑞14-------------------15三⽺⽣瑞⽓1617(如果有对齐问题,可以参看【图1.jpg】)1819其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。

2021请你填写“三⽺献瑞”所代表的4位数字(答案唯⼀),不要填写任何多余内容。

222324int xiang; -----025int rui; -----126int sheng; -----227int hui; -----328int san; -----429int yang; -----530int xian; -----631int qi; -----732*/33public class Main {34private static int[] arr = new int[8];35private static int[] dp = new int[10];36public static void main(String[] args) {37 f(0);38 }3940public static void f(int index) {41if (index == 8) {4243if (arr[0] == 0 || arr[4] == 0) {44return;45 }4647// 祥瑞⽣辉48int a1 = arr[0] * 1000 + arr[1] * 100 + arr[2] * 10 + arr[3];4950// 三⽺献瑞51int a2 = arr[4] * 1000 + arr[5] * 100 + arr[6] * 10 + arr[1];5253// 三⽺⽣瑞⽓54int result = arr[4] * 10000 + arr[5] * 1000 + arr[2] * 100 + arr[1] * 10 + arr[7];5556if (result == a1 + a2) {57 System.out.println("" + arr[4] + arr[5] + arr[6] + arr[1]);58for (int i = 0; i < arr.length; i++) {59 System.out.printf("%d\t", arr[i]);60 }61 System.out.println();62 }6364return;65 }6667for (int i = 0; i < 10; i++) {68if (dp[i] == 0) {69 dp[i] = 1;70 arr[index] = i;71 f(index + 1);72 dp[i] = 0;73 }74 }75 }76 } View Code。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

试题一:公式求值问题描述输入n, m, k,输出下面公式的值。

其中C_n^m是组合数,表示在n个人的集合中选出m个人组成一个集合的方案数。

组合数的计算公式如下。

输入格式输入的第一行包含一个整数n;第二行包含一个整数m,第三行包含一个整数k。

输出格式计算上面公式的值,由于答案非常大,请输出这个值除以999101的余数。

样例输入313样例输出162样例输入201010样例输出359316数据规模和约定对于10%的数据,n≤10,k≤3;对于20%的数据,n≤20,k≤3;对于30%的数据,n≤1000,k≤5;对于40%的数据,n≤10^7,k≤10;对于60%的数据,n≤10^15,k ≤100;对于70%的数据,n≤10^100,k≤200;对于80%的数据,n≤10^500,k ≤500;对于100%的数据,n在十进制下不超过1000位,即1≤n<10^1000,1≤k≤1000,同时0≤m≤n,k≤n。

提示999101是一个质数;当n位数比较多时,绝大多数情况下答案都是0,但评测的时候会选取一些答案不是0的数据;通过推导,可以将原式变为一个只含2^(n-i)的项和C(n,m)项的公式,然后分别求这两类公式的值,均有快速方法。

最终将这些项组合起来得到答案。

1.import java.math.BigInteger;2.import java.util.Scanner;3.public class Main4.{5.public static BigInteger lucas(BigInteger n,BigInteger m,BigInteger p){6.if(m.equals(BigInteger.ZERO)) return BigInteger.ONE;7.return BigInteger.valueOf(f(n.mod(p).longValue(),m.mod(p).longValue())).multiply(lucas(n.divide(p),m.divide(p),p)).mod(p);8.}9.10.11.public static long f(long n,long m){12.if(m>n) return 1;13.if(n==m|| m==0) return 1;14.if(m>n-m) m=n-m;15.long tmpi=1,tmpn=1,s1=1,s2=1,ans=1;16.for (int i = 1; i<=m; i++) {17.tmpi=i;18.tmpn=n-i+1;19.s1=s1*tmpi%999101;20.s2=s2*tmpn%999101;21.}22.ans = s2*pow1(s1,999099)%999101;23.return ans%999101;25.public static long pow1(long x,long n) {26.if(x==1) return 1;27.if (n==0)28.return 1;29.else {30.while ((n & 1)==0) {31.n>>=1;32.x=(x *x)%999101;33.}34.}35.long result = x%999101;36.n>>=1;37.while (n!=0) {38.x=(x *x)%999101;;39.if ((n & 1)!=0)40.result =result*x%999101;41.n>>=1;42.}43.return result;44.}45.public static void main(String[] args) {46.Scanner sc = new Scanner(System.in);47.BigInteger n = new BigInteger(sc.nextLine());48.BigInteger m = new BigInteger(sc.nextLine());49.int k = Integer.parseInt(sc.nextLine());50.long start = System.currentTimeMillis();51.BigInteger md = new BigInteger("999101");52.long Cnm=lucas(n, m,md).longValue()%999101;53.long sum = 0;54.if(Cnm!=0){55.int[][] a = new int[k][k];56.int h = 1;57.for (int i = 0; i < k; i++) {58.for (int j = 0; j < k; j++) {59.if (j >= h)60.a[i][j] =0;61.else {62.if (j == 0 || j == h - 1)63.a[i][j] = 1;64.else {65.a[i][j] = (a[i - 1][j - 1]*(h - j)+a[i - 1][j])%999101;66.}67.}69.h++;70.}71.long m1 = 1,n1 =1;72.long x=n.subtract(new BigInteger(k+"")).mod(md.subtract(BigInteger.ONE)).longValue();73.long n3 = pow1(2,x);74.for (int i = k - 1; i >= 0; i--) {75.n1=n3*pow1(2,i)%999101;76.m1 = m1*(n.subtract(new BigInteger((k - 1 - i) + "")).mod(md).longValue())%999101;77.sum = (sum+m1*a[k - 1][i]*n1)%999101;78.}79.sum = sum*Cnm%999101;80.}81.System.out.println(sum);82.long end = System.currentTimeMillis();83.}84.85.86.}试题二:九宫重排如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。

与空格子相邻的格子中的卡片可以移动到空格中。

经过若干次移动,可以形成第二个图所示的局面。

我们把第一个图的局面记为:12345678.把第二个图的局面记为:123.46758显然是按从上到下,从左到右的顺序记录数字,空格记为句点。

本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。

如果无论多少步都无法到达,则输出-1。

输入格式输入第一行包含九宫的初态,第二行包含九宫的终态。

输出格式输出最少的步数,如果不存在方案,则输出-1。

样例输入12345678.123.46758样例输出3样例输入13524678.46758123.样例输出22比较经典的搜索题,可以直接搜索或者使用双向搜索优化。

1.import java.io.*;2.import java.util.*;3.public class Main{4.static Map<String,Integer> hm1=new HashMap<String,Integer>();5.static Map<String,Integer> hm2=new HashMap<String,Integer>();6.public static void main(String args[]) throws IOException{7.BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));8.String start=bf.readLine();9.String end=bf.readLine();10.char[][] a=new char[3][3];11.char[][] b=new char[3][3];12.int c=0,x1=0,y1=0,x2=0,y2=0;13.for(int i=0;i<3;i++){14.for(int j=0;j<3;j++){15.a[i][j]=start.charAt(c);16.b[i][j]=end.charAt(c);17.c++;18.if(a[i][j]=='.'){19.x1=i;20.y1=j;21.}22.if(b[i][j]=='.'){23.x2=i;24.y2=j;25.}26.}27.}28.Node node1=new Node(0,x1,y1,a);29.Node node2=new Node(0,x2,y2,b);30.31.Queue<Node> qnode1=new LinkedList<Node>();32.Queue<Node> qnode2=new LinkedList<Node>();33.qnode1.add(node1);34.qnode2.add(node2);35.hm1.put(node1.gettu(), 0);36.hm2.put(node2.gettu(), 0);37.38.System.out.println(bfs(qnode1,qnode2));39.}40.public static int bfs(Queue<Node> q1,Queue<Node> q2){41.while(!q1.isEmpty()||!q2.isEmpty()){42.43.if(!q1.isEmpty()){44.Node node=q1.poll();45.46.int x=node.getX();47.int y=node.getY();48.if(hm2.containsKey(node.gettu())){49.return node.getSum()+hm2.get(node.gettu());50.}51.if(x>0){52.char[][] c=node.getCopy();53.c[x][y]=c[x-1][y];54.c[x-1][y]='.';55.Node node2=new Node(node.sum+1,x-1,y,c);56.String s=node2.gettu();57.if(hm2.containsKey(s)){58.return node2.getSum()+hm2.get(node2.gettu());59.}60.if(!hm1.containsKey(s)){61.hm1.put(s,node2.getSum());62.q1.add(node2);63.}64.}65.if(x<2){66.char[][] c=node.getCopy();67.c[x][y]=c[x+1][y];68.c[x+1][y]='.';69.Node node2=new Node(node.sum+1,x+1,y,c);70.String s=node2.gettu();71.if(hm2.containsKey(s)){72.return node2.getSum()+hm2.get(s);73.}74.if(!hm1.containsKey(s)){75.hm1.put(s,node2.getSum());76.q1.add(node2);77.}78.}79.if(y>0){80.char[][] c=node.getCopy();81.c[x][y]=c[x][y-1];82.c[x][y-1]='.';83.Node node2=new Node(node.sum+1,x,y-1,c);84.String s=node2.gettu();85.if(hm2.containsKey(s)){86.return node2.getSum()+hm2.get(s);87.}88.if(!hm1.containsKey(s)){89.hm1.put(s,node2.getSum());90.q1.add(node2);91.}92.}93.if(y<2){94.char[][] c=node.getCopy();95.c[x][y]=c[x][y+1];96.c[x][y+1]='.';97.Node node2=new Node(node.sum+1,x,y+1,c);98.String s=node2.gettu();99.if(hm2.containsKey(s)){100.return node2.getSum()+hm2 .get(s);101.}102.if(!hm1.containsKey(s)){103.hm1.put(s,node2.getSum()); 104.q1.add(node2);105.}106.}107.}108.if(!q2.isEmpty()){109.Node node=q2.poll();110.int x=node.getX();111.int y=node.getY();112.if(hm1.containsKey(node.gettu())){113.return node.getSum()+hm1.get(node .gettu());114.}115.if(x>0){116.char[][] c=node.getCopy();117.c[x][y]=c[x-1][y];118.c[x-1][y]='.';119.Node node2=new Node(node.sum+1,x -1,y,c);120.String s=node2.gettu();121.if(hm1.containsKey(s)){122.return node2.getSum()+hm1 .get(s);123.}124.if(!hm2.containsKey(s)){125.hm2.put(s,node2.getSum()); 126.q2.add(node2);127.}128.}129.if(x<2){130.char[][] c=node.getCopy();131.132.c[x][y]=c[x+1][y];133.c[x+1][y]='.';134.Node node2=new Node(node.sum+1,x +1,y,c);135.String s=node2.gettu();136.if(hm1.containsKey(s)){137.return node2.getSum()+hm1 .get(s);138.}139.if(!hm2.containsKey(s)){140.hm2.put(s,node2.getSum()); 141.q2.add(node2);142.}143.}144.if(y>0){145.char[][] c=node.getCopy();146.c[x][y]=c[x][y-1];147.c[x][y-1]='.';148.Node node2=new Node(node.sum+1,x ,y-1,c);149.String s=node2.gettu();150.if(hm1.containsKey(s)){151.return node2.getSum()+hm1 .get(s);152.}153.if(!hm2.containsKey(s)){154.hm2.put(s,node2.getSum()); 155.q2.add(node2);156.}157.}158.if(y<2){159.char[][] c=node.getCopy();160.c[x][y]=c[x][y+1];161.c[x][y+1]='.';162.Node node2=new Node(node.sum+1,x ,y+1,c);163.String s=node2.gettu();164.if(hm1.containsKey(s)){165.return node2.getSum()+hm1 .get(s);166.}167.if(!hm2.containsKey(s)){168.hm2.put(s,node2.getSum()); 169.q2.add(node2);170.}171.}172.}173.174.}175.176.return -1;177.}178.}179.class Node{180.int sum,x,y;181.char[][] c=null;182.public char[][] getCopy(){183.char[][] copy=new char[3][3];184.185.for(int i=0;i<3;i++){186.for(int j=0;j<3;j++){187.copy[i][j]=c[i][j];188.}189.}190.return copy;191.}192.public String gettu(){193.StringBuffer s=new StringBuffer();194.for(int i=0;i<3;i++){195.for(int j=0;j<3;j++){196.s.append(c[i][j]);197.}198.}199.return s.toString();200.}201.public Node(int sum, int x, int y, char[][] c) { 202.super();203.this.sum = sum;204.this.x = x;205.this.y = y;206.this.c = c;207.}208.public int getSum() {209.return sum;210.}211.public void setSum(int sum) {212.this.sum = sum;213.}214.public int getX() {215.return x;216.}217.public void setX(int x) {218.this.x = x;219.}220.public int getY() {221.return y;222.}223.public void setY(int y) { 224.this.y = y;225.}226.}。

相关文档
最新文档