标题:九宫重排

如图1的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片能够移动到空格中。通过若干次移动,能够造成图2所示的局面。

咱们把图1的局面记为:12345678.

把图2的局面记为:123.46758

显然是按从上到下,从左到右的顺序记录数字,空格记为句点。

本题目的任务是已知九宫的初态和终态,求最少通过多少步的移动能够到达。若是不管多少步都没法到达,则输出-1。

例如:

输入数据为:

12345678.

123.46758

则,程序应该输出:

3

再如:

输入:

13524678.

46758123.

则,程序输出:

22

资源约定:

峰值内存消耗(含虚拟机) < 64M

CPU消耗  < 2000ms

请严格按要求输出,不要多此一举地打印相似:“请您输入...” 的多余内容。

全部代码放在同一个源文件中,调试经过后,拷贝提交该源码。

注意:不要使用package语句。不要使用jdk1.6及以上版本的特性。

注意:主类的名字必须是:Main,不然按无效代码处理。java

思路:将九个格子按从上到下从左到右生成一个字符串,当某个格子为空(.)时,使用队列,按广度优先遍历的方法依次移动此时能够移动的格子,知道第一次找到目标字符串为止this

package 历届国赛;

import java.io.*;

import java.util.ArrayList;

import java.util.Collections;

import java.util.HashSet;

import java.util.Scanner;

import java.util.List;

public class 九宫重排 {

static String yl,yh;//移动前和移动后的字符串

static int st = 0;//步数

static HashSethh = new HashSet();//记录递归中的字符串

static Listlist = new ArrayList();

static Listl = new ArrayList();

static int[][]w_m = {//当第n个格子为空时,哪一个格子能够移动

{-1},

{2,4},

{1,3,5},

{2,6},

{1,5,7},

{2,4,6,8},

{3,5,9},

{4,8},

{5,7,9},

{6,8}

};

static int move_num(String s){//哪一个格子是空格

for(int i=0;i

if(s.charAt(i) == '.')

return i+1;

}

return -1;

}

static String move(String y,int m,int n){//y为移动前,从m移动到n,返回移动后字符串

char[]c = y.toCharArray();

char mm = c[n-1];

c[n-1] = c[m-1];

c[m-1] = mm;

return String.valueOf(c);

}

static class gz{//宫格类

int step;//步数

String now;//表明当前宫格的字符串

gz(int s,String n){

this.step = s;

this.now = n;

}

}

//用队列,当前空格位置,全部可移动的一次入队再出队,相似于广度优先遍历

static void bfs(){

hh.add(yl);

gz g = new gz(0,yl);

list.add(g);//将yl等全部的字符串封装进gz类(由于列表中每一步的步数值都必须独立)

while(!list.isEmpty()){

gz now_ = list.remove(0);//取出第一个;

if(now_.now.equals(yh)){

System.out.println(now_.step);

break;

}

int n = move_num(now_.now);

for(int i = 0;i

String temp = move(now_.now,w_m[n][i],n);

if(!hh.contains(temp)){

int s = now_.step+1;

gz g_ = new gz(s,temp);

hh.add(temp);

list.add(g_);

}

}

}

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

yl = sc.next();

yh = sc.next();

bfs();

}

}

蓝桥杯 九宫重排 java_九宫重排--蓝桥杯国赛历年真题相关推荐

  1. 分享个蓝桥杯的实训指导书,省赛国赛历年真题及解析

    刚上大一就参加了波校选,4个小时只做出了个按键翻转LCD屏的功能,确实很拉. 今年大二,校选又要开始了,于是乎开始准备,前段时间打电赛拿了个成功参赛,所以得弄弄这个蓝桥杯了.自己看了看一些赛题,感觉最 ...

  2. 太空大战-第14届蓝桥杯国赛Scratch真题中级组第6题

    [导读]:超平老师的<Scratch蓝桥杯真题解析100讲>已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第148讲. 太空大战,本题是2023年5月28日上午 ...

  3. 蓝桥杯第六届国赛JAVA真题----切开字符串

    标题:切开字符串 Pear有一个字符串,不过他希望把它切成两段. 这是一个长度为N(<=10^5)的字符串. Pear希望选择一个位置,把字符串不重复不遗漏地切成两段,长度分别是t和N-t(这两 ...

  4. 2017年第八届蓝桥杯C/C++ B组省赛历年真题及解析

    默认阅读的你具备c/c++基本语法,作者对每一题点明需要掌握的算法策略或思想,并进行简单注释解释: 该博客的正确食用方式:简单了解点明的算法思想和策略,再自行思索之后自己写代码,提交不过再看看别人的代 ...

  5. 蓝桥杯第七届国赛JAVA真题----七星填数

    七星填数 如图[图1.png]所示. 在七角星的14个节点上填入1~14 的数字,不重复,不遗漏. 要求每条直线上的四个数字之和必须相等. 图中已经给出了3个数字. 请计算其它位置要填充的数字,答案唯 ...

  6. 蓝桥杯第七届国赛JAVA真题----平方末尾

    平方末尾 能够表示为某个整数的平方的数字称为"平方数" 比如,25,64 虽然无法立即说出某个数是平方数,但经常可以断定某个数不是平方数. 因为平方数的末位只可能是:[0, 1, ...

  7. 蓝桥杯第七届国赛JAVA真题----机器人塔

    机器人塔 X星球的机器人表演拉拉队有两种服装,A和B. 他们这次表演的是搭机器人塔. 类似: 队内的组塔规则是: A 只能站在 AA 或 BB 的肩上.     B 只能站在 AB 或 BA 的肩上. ...

  8. 蓝桥杯第六届国赛JAVA真题----表格计算

    标题:表格计算 某次无聊中, atm 发现了一个很老的程序.这个程序的功能类似于 Excel ,它对一个表格进行操作. 不妨设表格有 n 行,每行有 m 个格子. 每个格子的内容可以是一个正整数,也可 ...

  9. 蓝桥杯第六届国赛JAVA真题----奇怪的数列

    标题:奇怪的数列 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 .... YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都 ...

最新文章

  1. 2022-2028年中国公路客运行业市场研究及前瞻分析报告
  2. mapreduce.job.reduce.slowstart.completedmaps
  3. (转)Lucene.NET 使用
  4. JMeter断言介绍
  5. windows 2008 下C#调用office组件访问拒绝的解决方法(failed due to the following error: 80070005 拒绝访问)...
  6. 暴雪还不赶快?劳拉与光之守护者PC平台登陆
  7. Windows 10企业批量部署实战之自动化rules设置
  8. vue打包后放在 nginx部署时候的配置文件
  9. MySQL show 语句
  10. 南加大计算机硕士学制,2020年南加州大学硕士读几年
  11. 解决unity3d发布的网页游戏放到服务器上无法使用的问题
  12. VB.NET Crystal Reports 水晶报表 自定义工具栏
  13. 华为手机所有图标变黑_华为手机app图标变成黑色
  14. [CF364D]Ghd
  15. 程矢Oracle PowerDesigner中生成Oracle版本主键和自增列
  16. JS:验证、限制纯数字或者英尺英寸格式的值
  17. 辛普森悖论如何影响AB测试
  18. css动态特效 @keyframes
  19. 用最通俗的语言讲一讲,什么是阻抗匹配?
  20. Fuel-openstack的搭建(二)

热门文章

  1. STM32的HAL库知识总结
  2. 《炬丰科技-半导体工艺》半导体的清洗过程
  3. xml阅读器_福昕PDF阅读器永久免费版!
  4. FlyFish模版中心正式上线,快来领取社区周边礼物
  5. spring Security 权限管理
  6. 已知两点坐标,求直线方程、距离其中一点距离为L的某点
  7. Python对离散变量处理:哑变量编码和one-hot编码
  8. 02 MySQL优化 - 优化SQL语句
  9. H3Cs5500堆叠配置
  10. 基于matlab fir数字滤波器设计 程序流程图,实验五:FIR数字滤波器设计与软件实现...