您的位置:首页 > 编程语言 > Java开发

深度优先搜索 走迷宫 java实现

2018-03-23 20:13 260 查看
题目如下 :
    


本题我采用深度优先搜索的方式解决,建立一个二维的int类型数组,定义其中的1代表起点,2代表可以走的地方,3代表不可以走的地方,4代表终点,其中由于在搜索的时候有上下左右四个方向,为了防止做判断的时候报ArrayIndexOfBoundsException,所以保存地图的二维数组我故意多了两行两列作为边界,值设置为0,然后定义一个函数 dfs(int x,int y)代表搜索这个位置,一开始先从地图上的起点开始搜索,设置一个二维数组move记录可以走的方向,所以代码如下
    import java.util.*;
public class DFSMiGong {
static int[][] datas = null;
static int[][] move = {{0,1},{1,0},{-1,0},{0,-1}};
static int result = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int startX=0,startY=0;
String temp = null;
datas = new int[n+2][m+2];
for(int i=1;i<=n;i++){
temp = sc.next();
for(int j=1;j<=m;j++){
char techar = temp.charAt(j-1);
switch(techar){
case 'S':
datas[i][j] = 1;startX=i;startY=j;break;
case 'T':
datas[i][j] = 4;break;
case '.':
datas[i][j] = 2;break;
case '#':
datas[i][j] = 3;break;
}
}
}
dfs(startX,startY);
System.out.print(result);
}

public static void dfs(int x,int y){
if(datas[x][y]==4){//如果走到了终点,数目加1
result+=1;
return ;
}else{

for(int i=0;i<4;i++){ //尝试四个方向
datas[x][y] = 0; //标记这个位置走过了,因为一个位置只能走一次
if(datas[x+move[i][0]][y+move[i][1]]==2||datas[x+move[i][0]][y+move[i][1]]==4){
dfs(x+move[i][0],y+move[i][1]);
}
datas[x][y] = 2; //回溯,因为2代表可以走
}
}
}

}结果如下 :


    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: