问题描述:
迷宫地图如下:
------------
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR
------------
请你计算一下,最后,有多少玩家会走出迷宫?
而不是在里边兜圈子。
解题思路:
具体代码:
package easy;
import java.util.Scanner;
public class Number_n {
static String data[] = new String[20];
static boolean visit[][] = new boolean[20][20];
static int ans = 0;
public static void dfs(int i,int j){
if(i < 0 || i > 9 || j < 0 || j > 9){ //只要走出了边界,就是走出了迷宫
//不要思维定势,认为只有走到右下角才算走出迷宫
ans++;
return;
}
if(visit[i][j]==true) //只要走过这个点,就代表这条路走不通了,会陷入循环
return;
visit[i][j]=true;
if(data[i].charAt(j)=='U')
dfs(i-1,j);
else if(data[i].charAt(j)=='D')
dfs(i+1,j);
else if(data[i].charAt(j)=='R')
dfs(i,j+1);
else if(data[i].charAt(j)=='L')
dfs(i,j-1);
}
public static void clear(){ //每从一个点出发,都要将visit清空一遍
for(int i = 0;i < 10;i++)
for(int j = 0;j < 10;j++)
visit[i][j]=false; //最初情况所有点都未被遍历
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
data[0] = "UDDLUULRUL";
data[1] = "UURLLLRRRU";
data[2] = "RRUURLDLRD";
data[3] = "RUDDDDUUUU";
data[4] = "URUDLLRRUU";
data[5] = "DURLRLDLRL";
data[6] = "ULLURLLRDU";
data[7] = "RDLULLRDDD";
data[8] = "UUDDUDUDLL";
data[9] = "ULRDLUURRR";
for(int i = 0;i < 10;i++)
for(int j = 0;j < 10;j++){
clear();
dfs(i,j);
}
System.out.println(ans);
}
}
注意:
1、在此题中,只要走出了迷宫边界,就算走出迷宫,因为没有设置固定出口,因此不能思维定势认为只有走到右下角才算走出迷宫。
2、能走出迷宫——>不兜圈子——>不走重复走过的点