Java实现 蓝桥杯 算法提高 八数码(BFS)
试题 算法提高 八数码
问题描述
RXY八数码
输入格式
输入两个33表格
第一个为目标表格
第二个为检索表格
输出格式
输出步数
样例输入
1 2 3
4 5 6
7 8 0
1 2 3
4 5 6
7 0 8
样例输出
1
数据规模和约定
33*2
PS:
花里胡哨得,直接套代码搜
import java.util.*;
public class Main {
static int[]dx = {0,0,1,-1};
static int[]dy = {1,-1,0,0};
static int[][]st = new int[3][3];
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int [][]st1 = new int[3][3];
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
st1[i][j]=scan.nextInt();
}
}
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
st[i][j]=scan.nextInt();
}
}
System.out.println(bfs(st1));
}
public static int[][] swap(int[][]st1,int i,int j,int sx,int sy){
int[][]st2 = new int[3][3];
for(int w=0;w<3;++w){
for(int e=0;e<3;++e){
st2[w][e]=st1[w][e];
}
}
int x = st2[i][j];
st2[i][j]=st1[sx][sy];
st2[sx][sy]=x;
return st2;
}
public static int bfs(int[][]st1){
Queue<int[][]> q = new LinkedList<>();
HashMap<int[][],Integer> m = new HashMap<>();
q.offer(st1);
m.put(st1, 0);
while(!q.isEmpty()){
int[][]st2 = q.poll();
boolean b1 = true;
for(int w=0;w<3;++w){
for(int e=0;e<3;++e){
if(st2[w][e]!=st[w][e]){
b1=false;
}
}
}
if(b1){
return m.get(st2);
}
for(int i=0;i<3;++i){
for(int j=0;j<3;++j){
if(st2[i][j]==0){
for(int k=0;k<4;++k){
int sx = i+dx[k];
int sy = j+dy[k];
if(sx<0||sx>=3||sy<0||sy>=3){
continue;
}
int[][]st3=swap(st2,i,j,sx,sy);
if(!m.containsKey(st3)){
q.offer(st3);
m.put(st3, m.get(st2)+1);
}
}
}
}
}
}
return -1;
}
}
Java实现 蓝桥杯 算法提高 八数码(BFS)的更多相关文章
- Java实现蓝桥杯 算法提高 八皇后 改
**算法提高 8皇后·改** 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8的棋 ...
- Java实现 蓝桥杯 算法提高 进攻策略加强(暴力)
试题 算法提高 进攻策略加强 问题描述 植物大战僵尸这款游戏中,还有一个特别的玩儿法:玩家操纵僵尸进攻植物. 首先,僵尸有m种(每种僵尸都是无限多的),玩家可以选择合适的僵尸来进攻.使用第i种僵尸需要 ...
- Java实现 蓝桥杯 算法提高 小X的购物计划
试题 算法提高 小X的购物计划 问题描述 小X打算去超市shopping.小X没什么钱,只有N元.超市里有M种物品,每种物品都需要money,在小X心中有一个重要度.有的物品有无限件,有的物品只有几件 ...
- Java实现 蓝桥杯 算法提高 天天向上(DP)
试题 算法提高 天天向上 问题描述 A同学的学习成绩十分不稳定,于是老师对他说:"只要你连续4天成绩有进步,那我就奖励给你一朵小红花."可是这对于A同学太困难了.于是,老师对他放宽 ...
- Java实现 蓝桥杯 算法提高 欧拉函数(数学)
试题 算法提高 欧拉函数 问题描述 老师出了一道难题,小酱不会做,请你编个程序帮帮他,奖金一瓶酱油: 从1-n中有多少个数与n互质? |||||╭══╮ ┌═════┐ ╭╯让路║═║酱油专用车║ ╰ ...
- Java实现 蓝桥杯 算法提高 计算超阶乘(暴力)
试题 算法提高 计算超阶乘 问题描述 计算1*(1+k)(1+2k)(1+3k)-(1+n*k-k)的末尾有多少个0,最后一位非0位是多少. 输入格式 输入的第一行包含两个整数n, k. 输出格式 输 ...
- Java实现蓝桥杯 算法提高 线段和点
算法提高 线段和点 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 有n个点和m个区间,点和区间的端点全部是整数,对于点a和区间[b,c],若a>=b且a<=c,称点a满 ...
- Java实现蓝桥杯-算法提高 P1003
算法提高 P1003 时间限制:1.0s 内存限制:256.0MB 作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词.不过,有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检 ...
- Java实现 蓝桥杯 算法提高 高精度减法(JDK方法)
试题 算法提高 高精度减法 问题描述 高精度减法 输入格式 两行,表示两个非负整数a.b,且有a > b. 输出格式 一行,表示a与b的差 样例输入 1234567890987654321 99 ...
随机推荐
- flink基础篇
Flink面试--核心概念和基础考察 1.简单介绍一下 Flink 2.Flink 相比传统的 Spark Streaming 有什么区别? 3.Flink 的组件栈有哪些? 面试知识 ...
- 预测算法:基于UCF的电影推荐算法
#基于用户的推荐类算法 from math import sqrt #计算两个person的欧几里德距离 def sim_distance(prefs,person1,person2): si = { ...
- 一个数组求其最长递增子序列(LIS)
一个数组求其最长递增子序列(LIS) 例如数组{3, 1, 4, 2, 3, 9, 4, 6}的LIS是{1, 2, 3, 4, 6},长度为5,假设数组长度为N,求数组的LIS的长度, 需要一个额外 ...
- 搭建私有镜像仓库registry 2.0
搭建 docker run -d -p 5000:5000 --restart=always --name registry2 registry:2 就可以将自己的镜像 push到这个私有的镜像仓库 ...
- 腾讯几款QQ软件
1.QQ(普通版QQ) https://im.qq.com/ 2.Tim(QQ办公简洁版) https://tim.qq.com/ https://baike.baidu.com/item/Tim/2 ...
- 08 返回动态页面web框架
08 返回动态页面web框架 动态页面: 网页的内容是动态变化的,不是一直不变的(静态页面:每次显示的内容都是一样) 服务器server端python程序(动态页面版本): import socket ...
- Django之请求生命周期
settings.py中间件执行 自定义中间件的配置: (1)任意新建一个py文件,导入模块from django.utils.deprecation import MiddlewareMixin ( ...
- GreenPlum-数据存储目录迁移及常用操作
一.环境介绍 Greenplum5 3节点集群,Centos7.2虚拟机, 二.需求 因为/home目录磁盘空间已满,需要将Greenplum的数据存储目录转移到新的分区/opt目录下,虚拟机磁盘管理 ...
- 第几天?(hdu2005)
第几天那个代码模板可以保存起来. #include<stdio.h> #include<math.h> #define PI 3.1415927 using namespace ...
- (上)python3 selenium3 从框架实现学习selenium让你事半功倍
本文感谢以下文档或说明提供的参考. Selenium-Python中文文档 Selenium Documentation Webdriver 参考 如有错误欢迎在评论区指出,作者将即时更改.文章从我的 ...