Java实现 蓝桥杯VIP 算法提高 我们的征途是星辰大海
算法提高 我们的征途是星辰大海
时间限制:1.0s 内存限制:256.0MB
最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成。
共有四种方格:
‘.’ 代表空地,curiosity可以穿过它
‘#’ 代表障碍物,不可穿越,不可停留
‘S’ 代表curiosity的起始位置
‘T’ 代表curiosity的目的地
NASA将会发送一系列的命令给curiosity,格式如下:“LRUD”分别代表向左,向右,向上,向下走一步。由于地球和火星之间最近时也有55000000km!所以我们必须提前判断这一系列的指令会让curiosity最终处在什么样的状态,请编程完成它。
输入格式
第一行是一个整数T,代表有几个测试样例
每个测试样例第一行是一个整数N(1<=N<=50))代表迷宫的大小(N*N)。随后的N行每行由N个字符串组成,代表迷宫。接下来的一行是一个整数Q,代表有多少次询问,接下来的Q行每行是一个仅由“LRUD”四个字母的组成的字符串,字符转长度小于1000.
输出格式
对于每个询问输出单独的一行:
“I get there!”:执行给出的命令后curiosity最终到达了终点。
“I have no idea!”:执行给出的命令后curiosity未能到达终点。
“I am dizzy!”:curiosity在执行命令的过程中撞到了障碍物。
“I am out!”:代表curiosity在执行命令的过程中走出了迷宫的边界。
Sample Input
2
2
S.
#T
2
RD
DR
3
S.#
.#.
.T#
3
RL
DDD
DDRR
Sample Output
I get there!
I am dizzy!
I have no idea!
I am out!
I get there!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 我们的征途是星辰大海 {
static int maxn = 50;
static char[][] maze =new char[maxn][maxn];
static int N,Q;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] ans = {"I get there!","I have no idea!","I am dizzy!","I am out!"};
int t = Integer.parseInt(br.readLine());
int sx=0,sy=0,tx=0,ty=0;
while(t>0)
{
N=Integer.parseInt(br.readLine());
//System.out.println("n的值"+N);
for(int i=0;i<N;i++)
{
char[] ch = br.readLine().toCharArray();
for(int j =0;j<N;j++)
{
maze[i][j]=ch[j];
//System.out.print(maze[i][j]);
if (maze[i][j] == 'S') {sx = i; sy = j;}
if (maze[i][j] == 'T') {tx = i; ty = j;}
}
}
Q=Integer.parseInt(br.readLine());
//System.out.println("q的值为"+Q);
for(int i=0;i<Q;i++)
{
String op=br.readLine();
int res=solve(op,sx,sy,tx,ty);
System.out.println(ans[res]);
}
t--;
}
}
private static int solve(String op, int sx, int sy, int tx, int ty) {
char[] ch1 = op.toCharArray();
if(sx==tx&&sy==ty)
return 0;
for( int i = 0;i < ch1.length; i++)
{
if(ch1[i] == 'L') sy -= 1;
else if(ch1[i] == 'R') sy += 1;
else if(ch1[i] == 'U') sx -= 1;
else sx += 1;
if( sx < 0 || sy < 0 || sx >= N || sy >= N)
return 3;
if( maze[sx][sy] == '#')
return 2;
if(sx == tx && sy == ty)
return 0;
}
return 1;
}
}
相关文章
- Java项目毕业设计:基于springboot+vue的电影视频网站系统「建议收藏」
- java打印数组_Java中打印数组的三种方式
- java冒泡排序经典代码_Java 8大经典排序算法(含源代码),必须收藏!
- java用正则表达式大全_Java 正则表达式 大全「建议收藏」
- java山寨qq账号密码验证_Java实战-山寨QQ
- 工具包 java-dataloader 异步批处理装载数据
- Java集合面试题_java是什么
- 【JAVA】Java 日志打印规范
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法详解编程语言
- Java数据结构学习笔记之二Java数据结构与算法之栈(Stack)实现详解编程语言
- Java程序员必备知识,《JAVA编程思想》包和访问权限详解编程语言
- MergeSort(归并排序)算法Java实现详解编程语言
- ?使用 Java 连接 MySQL 数据库的步骤(java怎么连接mysql)
- Java实现MSSQL数据库连接(java连接mssql)
- Java实现Redis分布式锁(java实现redis锁)
- Deploying Java on Linux: A Simple Guide for Beginners.(linux上部署java)
- Java实现Linux:跨平台解决方案(java 实现linux)
- 管理Linux下Java版本管理:轻松实现多版本切换(linux下java版本)
- Java实现嵌入式MySQL的新解决方案(java嵌入式mysql)
- Java配置Oracle实现稳定的跨平台数据库连接(java配置oracle)
- Java 开发提升Oracle数据库性能(java开发oracle)
- Oracle中实现Java程序设计的极限可能性(oracle中的java)
- JAVA实现KMP算法理论和示例代码