1、问题描述
输入n和m表示迷宫的行数和列数,接下俩输入迷宫的状态,使用深度优先搜寻即可求出最短距离
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
2、代码实现
import java.util.Scanner;
public class 走迷宫 {
static int n;
static int m;
static int[][] map;
static int min = Integer.MAX_VALUE;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
m = scanner.nextInt();
map = new int[n][m];
//0表示可以走,1表示障碍物,2表示已走过
for(int i = 0;i < n;i++) {
for(int j = 0;j < m;j++) {
map[i][j] = scanner.nextInt();
}
}
dfs(0,0,0);
System.out.println(min);
}
public static void dfs(int x,int y,int step) {
if(x == n - 1 && y == m - 1) {
if(step < min) {
min = step;
}
return;
}
//右边
if(x < n && y + 1 < m && map[x][y + 1] == 0) {
map[x][y + 1] = 2;
dfs(x,y + 1,step + 1);
map[x][y + 1] = 0;
}
//下边
if(x + 1< n && y < m && map[x + 1][y] == 0) {
map[x + 1][y] = 2;
dfs(x + 1,y,step + 1);
map[x + 1][y] = 0;
}
//左边
if(x < n && y - 1 >= 0 && map[x][y - 1] == 0) {
map[x][y - 1] = 2;
dfs(x,y - 1,step + 1);
map[x][y - 1] = 0;
}
//上边
if(x - 1 >= 0 && y < m && map[x - 1][y] == 0) {
map[x - 1][y] = 2;
dfs(x - 1,y,step + 1);
map[x - 1][y] = 0;
}
return;
}
}