题目描述
X星球的一处迷宫游乐场建在某个小山坡上。
它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。
我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,
R表示走到右边的房间,
U表示走到上坡方向的房间,
D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。
他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。
玩家一定要按照地上的字母移动。
迷宫地图如下:
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
请你计算一下,最后,有多少玩家会走出迷宫?
而不是在里边兜圈子。
请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。
如果你还没明白游戏规则,可以参看一个简化的4x4迷宫的解说图:
题目解析:
这道题难度应该不算大,简单的dfs深搜题,需要注意的是在dfs函数中我们需要先考虑边界情况,然后根据当前的字母来判断接下来应该往哪个方向走,在这里我们继续调用dfs函数即可,在主函数中,输入二维字符数组采用固定的套路用toCharArray进行转换。因为本题没有初始的起点,所以在主函数里我们通过两层循环一个点一个点的进行遍历深搜,最后得出结果。
参考代码:
import java.util.Scanner;
/**
* 迷宫探索
* @author autumn_leaf
* @Date 2019/03/23
*/
public class ExploreMazes {
static char[][] maze = new char[11][11];
static int[][] vis = new int[10][10];
static int ans = 0;
//深搜函数
static void dfs(int i,int j) {
//走到了边界
if(i==-1 || i==10 || j==-1 || j==10) {
ans++;
return;
}
if(vis[i][j] ==1)
return ;
vis[i][j] = 1;
char ch = maze[i][j];
//上下左右四个方向
if(ch == 'U')
dfs(i-1,j);
if(ch == 'D')
dfs(i+1,j);
if(ch == 'L')
dfs(i,j-1);
if(ch == 'R')
dfs(i,j+1);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入二维字符数组
for(int i=0; i<10; i++) {
String temp = sc.nextLine();
maze[i] = temp.toCharArray();
}
for(int i=0; i<10; i++) {
for(int j=0 ;j<10; j++) {
//初始化
vis = new int[10][10];
dfs(i,j);
}
}
System.out.println(ans);
}
}
最终得到的结果为:31
好了,本题题解就到这里了,有疑惑的同学可以在下方评论区留言哦!