蓝桥杯java 迷宫

01010101001011001001010110010110100100001000101010
00001000100000101010010000100000001001100110100101
01111011010010001000001101001011100011000000010000
01000000001010100011010000101000001010101011001011
00011111000000101000010010100010100000101100000000
11001000110101000010101100011010011010101011110111
00011011010101001001001010000001000101001110000000
10100000101000100110101010111110011000010000111010
00111000001010100001100010000001000101001100001001
11000110100001110010001001010101010101010001101000
00010000100100000101001010101110100010101010000101
11100100101001001000010000010101010100100100010100
00000010000000101011001111010001100000101010100011
10101010011100001000011000010110011110110100001000
10101010100001101010100101000010100000111011101001
10000000101100010000101100101101001011100000000100
10101001000000010100100001000100000100011110101001
00101001010101101001010100011010101101110000110101
11001010000100001100000010100101000001000111000010
00001000110000110101101000000100101001001000011101
10100101000101000000001110110010110101101010100001
00101000010000110101010000100010001001000100010101
10100001000110010001000010101001010101011111010010
00000100101000000110010100101001000001000000000010
11010000001001110111001001000011101001011011101000
00000110100010001000100000001000011101000000110011
10101000101000100010001111100010101001010000001000
10000010100101001010110000000100101010001011101000
00111100001000010000000110111000000001000000001011
10000001100111010111010001000110111010101101111000
这里用bfs从终点依次寻找到终点的最短距离,存放到一数组里面,最后输出起点数组就得到路径长度
而具体路径,就从头遍历开始,寻找长度相差一的,最后就是所要的答案,代码如下:
import java.util.*;
class Node{
int x, y;
void node(int x, int y) {
this.x = x;
this.y = y;
}
}
public class Main {
static int n,m;
static char [][] dir = new char[30][50];
static Queue<Node> queue = new LinkedList<Node>();
static int a[] = {1, 0, 0, -1};
static int b[] = {0, -1, 1, 0};
static char s[] = {'D', 'L', 'R', 'U'};
static int [][] len = new int[30][50];
static void bfs() {
Node s = new Node();
s.x = n - 1;
s.y = m - 1;
len[n - 1][m - 1] = 0;
queue.offer(s);
while(!queue.isEmpty()) {
s = queue.poll();
for(int i = 0; i < 4; i++) {
int ax = s.x + a[i];
int by = s.y + b[i];
if(ax >= 0 && ax < n && by >= 0 && by < m && len[ax][by] == -1 && dir[ax][by] == '0') {
len[ax][by] = len[s.x][s.y] + 1;
Node node = new Node();
node.x = ax;
node.y = by;
queue.offer(node);
}
}
}
}
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for(int i = 0; i < n; i++) {
String s = sc.next();
for(int j = 0; j < m; j++) {
len[i][j] = -1;
dir[i][j] = s.charAt(j);
}
}
bfs();
System.out.println(len[0][0]);
int x = 0; int y = 0;
String p = "";
while(x != n-1 || y != m-1) {
W: for(int i = 0; i < 4; i++) {
int ax = x + a[i];
int by = y + b[i];
if(ax >= 0 && ax < n && by >= 0 && by < m && len[ax][by] != -1 && dir[ax][by] == '0') {
if(len[x][y] == len[ax][by] + 1) {
x = ax;
y = by;
p += s[i];
break W;
}
}
}
}
System.out.print(p);
}
}
没给注释,不懂可以留言,个人做的,有错误欢迎指正。
蓝桥杯java 迷宫的更多相关文章
- 蓝桥杯java试题《洗牌》
问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌.虽然小弱T不怎么会洗牌,但是他却总是输. 渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输.所以小弱T认为自己洗牌不够均匀,就独 ...
- 蓝桥杯java历年真题及答案整理1~20.md
蓝桥杯java历年真题及答案整理(闭关一个月,呕心沥血整理出来的) 1 算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种.如:给定 A.B.C三个不同的字符,则结果为:A ...
- 蓝桥杯Java真题解析
上个月参加蓝桥杯省赛拿了个省一,自从比赛完之后就一直没怎么写代码了,还有一个多月就要国赛了,从现在开始准备下国赛,但是我也不想学什么算法,而且我还在准备考研,所以就打算只做下历年的真题,争取国赛拿个国 ...
- 【备考06组01号】第四届蓝桥杯JAVA组A组国赛题解
1.填算式 (1)题目描述 请看下面的算式: (ABCD - EFGH) * XY = 900 每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0. 比如 ...
- 第八届蓝桥杯java b组第六题
标题:最大公共子串 最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少. 比如:"abcdkkk" 和 "baabcdadabc",可以找 ...
- 第三届蓝桥杯Java高职组决赛第三题
题目描述: 某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). 例如,我们可以对小车输入如 ...
- 第三届蓝桥杯Java高职组决赛第一题
题目描述: 看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字. 这个算式有多少种可能的正确填写方法? 173 + 286 = 459 295 + 173 = ...
- 蓝桥杯java 关于大范围时间的
import java.util.Calendar; import java.util.Date; public class A { /*这道题学习使用了java的calendar和类,主要是对dat ...
- 49-2015年第6届蓝桥杯Java B组
1.三角形面积 如图1所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. image.png 计算方法: 8 * ...
随机推荐
- Codeforces Round #576 (Div. 2) 题解
比赛链接:https://codeforc.es/contest/1199 A. City Day 题意:给出一个数列,和俩个整数\(x,y\),要求找到序号最靠前的数字\(d\),使得\(d\)满足 ...
- 5_2 木块问题(UVa101)<vector的使用>
[背景] 在计算机科学中的很多地方都会使用简单,抽象的方法来做分析和实验验究.比如在早期的规划学和机器人学的人工智能研究就利用一个积木世界,让机械臂执行操作积木的任务. 在这个问题中,你将在确定的规则 ...
- 【代码学习】PYTHON字符串的常见操作
一.字符串运算符 下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python": 操作符 描述 实例 + 字符串连接 >>>a ...
- 转发-【分享】思科无线控制器HA模式升级
思科无线控制器HA模式下升级文档 当前使用版本:8.0.120.0 计划升级版本:8.2.151.0 其他工具: TFTP Server: 3CDaemon 远程登录:SecureCRT ...
- PW数据库ER图
- 到底是哪个“O”管理内部人员风险?
导读 俗话说,家和万事兴.与之相对的,家不睦则必自败.同理,如果缺乏明确的领导,内部人员风险管理项目或内部人威胁项目 (ITP) 也将走向失败. 俗话说,家和万事兴.与之相对的,家不睦则必自败.同理, ...
- jquery中 $(xxx).each() 和 $.each()的区别,以及enter键一键登录
1.$().each 在dom处理上面用的较多.如果页面有多个input标签类型为text,对于这时用$().each来处理多个text,例如: $("input[type=’text’]& ...
- main函数递归
以前听说main()不能递归?于是在CentOS7上使用gcc-8.1.0测试了一下,发现可行: #include <stdio.h> int x = 5; int main(int ar ...
- url转码。
Javascript 中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,deco ...
- MVC 拦截器
https://www.cnblogs.com/blosaa/archive/2011/06/02/2067632.html