java 蓝桥杯 我们的征途是星辰大海
Posted //我是小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 蓝桥杯 我们的征途是星辰大海相关的知识,希望对你有一定的参考价值。
java 蓝桥杯 DFS 我们的征途是星辰大海
问题描述
样例输入:
2
2
S.
#T
2
RD
DR
3
S.#
.#.
.T#
3
RL
DDD
DDRR
样例输出:
I get there!
I am dizzy!
I have no idea!
I am out!
I get there!
思路分析
仔细阅读题目会发现其实这就是一个类似于走迷宫的简单问题,有必要注意的是样例的接收顺序,然后定义dfs方法,根据题目意思判断输出即可,具体的思路都在注释里了😁
import java.util.Scanner;
public class 星辰大海 {
static char[][]map;
static int n;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int k=sc.nextInt();
//循环K次
while (k-->0) {
//接收n初始化地图
n=sc.nextInt();
map=new char[n][n];
for (int i = 0; i < n; i++) {
String str=sc.next();
for (int j = 0; j < n; j++) {
map[i][j]=str.charAt(j);
}
}
//遍历地图找到'S'(找到起点的坐标)
int x=0,y=0;
for (int i = 0; i <n; i++) {
for (int j = 0; j <n; j++) {
if(map[i][j]=='S') {
x=i;
y=j;
}
}
}
//接收询问次数
int q=sc.nextInt();
for (int i = 0; i < q; i++) {
String s=sc.next();
//执行深搜 参数为x坐标,y坐标,从0开始的索引,询问字符串
dfs(x,y,0,s);
}
}
}
public static void dfs(int x,int y,int index,String s){
//边界判断!!!注意这个判断要放在第一,不然会爆
if(x<0||y<0||x>=n||y>=n) {
System.out.println("I am out!");
return;
}
//询问字符串结束,并且所在点为T,说明到达目的地
if(index==s.length()&&map[x][y]=='T') {
System.out.println("I get there!");
return;
}
//询问字符串结束,并且所在点不为T,说明没有到达目的地
if(index==s.length()&&map[x][y]!='T') {
System.out.println("I have no idea!");
return;
}
//途中遇到障碍物!
if(map[x][y]=='#') {
System.out.println("I am dizzy!");
return;
}
//指令没有结束就已经到达目的地
if(map[x][y]=='T') {
System.out.println("I get there!");
return;
}
//左右上下走
if(s.charAt(index)=='L') {
dfs(x,y-1,index+1,s);
}else if(s.charAt(index)=='R') {
dfs(x,y+1,index+1,s);
}else if(s.charAt(index)=='U') {
dfs(x-1,y,index+1,s);
}else if(s.charAt(index)=='D') {
dfs(x+1,y,index+1,s);
}
}
}
以上是关于java 蓝桥杯 我们的征途是星辰大海的主要内容,如果未能解决你的问题,请参考以下文章