题目描述
X 星球的一处迷宫游乐场建在某个小山坡上。它是由 10×10 相互连通的小房间组成的。
房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:
- L 表示走到左边的房间,
- R 表示走到右边的房间,
- U 表示走到上坡方向的房间,
- D 表示走到下坡方向的房间。
X 星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把 100 名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。
迷宫地图如下:
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
请你计算一下,最后,有多少玩家会走出迷宫,而不是在里边兜圈子?
如果你还没明白游戏规则,可以参看下面一个简化的 4x4 迷宫的解说图:
解题代码
import java.util.Scanner;
public class Lanqiao {
static char[][] arr;
static int[][] vis;
static int count = 0;
public static void main(String[] args) {
String str = "UDDLUULRULUURLLLRRRURRUURLDLRDRUDDDDUUUUURUDLLRRUUDURLRLDLRLULLURLLRDURDLULLRDDDUUDDUDUDLLULRDLUURRR";
arr = new char[10][10];
int n = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = str.charAt(n);
n++;
}
}
vis = new int[10][10];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
// 每个格子都会投放一个人 然后再去走路线
dfs(i, j);
}
}
System.out.println(count);
}
private static void dfs(int x, int y) {
if (x <= -1 || y >= 10 || x >= 10 || y <= -1) {
count++;
return;
}
if (vis[x][y] == 1) {
return;
}
vis[x][y] = 1;
if (arr[x][y] == 'U') {
dfs(x - 1, y);
} else if (arr[x][y] == 'L') {
dfs(x, y - 1);
} else if (arr[x][y] == 'R') {
dfs(x, y + 1);
} else if (arr[x][y] == 'D') {
dfs(x + 1, y);
}
vis[x][y] = 0; // 回溯
}
}