java走迷宫
回溯算法练习
源码
// 走迷宫
public class Backtracking {
// 生成迷宫
public static int[][] makeMap(){
// 创建二维数组
int[][] map = new int[10][10];
// 设置迷宫四周
for(int i = 0;i < 10;i ++){
map[0][i] = 1;
map[9][i] = 1;
map[i][0] = 1;
map[i][9] = 1;
}
// 设置障碍
map[1][3] = 1;
map[2][2] = 1;
map[3][3] = 1;
map[4][2] = 1;
map[5][4] = 1;
map[6][2] = 1;
map[6][6] = 1;
map[7][8] = 1;
map[7][1] = 1;
map[8][3] = 1;
return map;
}
// 打印迷宫
public static void print(int[][] map,String str){
System.out.println(str + "为:");
for(int[] array : map){
for(int number : array){
System.out.print(number + " ");
}
System.out.println();
}
}
// 走迷宫
public static boolean setWay(int[][] map,int i,int j){
// 走到出口处
if(map[8][8] == 2){
return true;
}else{
// 按右,下,上,左走
// 可通过时
if(map[i][j] == 0){
map[i][j] = 2;
// 右
if(setWay(map, i, j + 1))
return true;
// 下
else if(setWay(map, i + 1, j)){
return true;
}
// 左
else if(setWay(map, i, j - 1)){
return true;
}
// 上
else if(setWay(map, i - 1, j)){
return true;
}
// 说明此路不同
else {
map[i][j] = 3;
return false;
}
}
// 此处为1,2,3时
else
return false;
}
}
public static void main(String[] args){
//生成迷宫
// 0-可通过,1-墙,不可通过,2-通过的路线,3-死胡同
int[][] map = makeMap();
print(map,"迷宫");
// 走迷宫
setWay(map, 1, 1);
// 打印路线-2
print(map, "路线");
}
}
结果
迷宫为:
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 0 1
1 0 1 0 0 0 0 0 0 1
1 0 0 1 0 0 0 0 0 1
1 0 1 0 0 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0 0 1
1 1 0 0 0 0 0 0 1 1
1 0 0 1 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
路线为:
1 1 1 1 1 1 1 1 1 1
1 2 3 1 0 0 0 0 0 1
1 2 1 0 0 0 0 0 0 1
1 2 3 1 0 0 0 0 0 1
1 2 1 0 0 0 0 0 0 1
1 2 2 2 1 0 0 0 0 1
1 0 1 2 2 2 1 0 0 1
1 1 0 0 0 2 2 2 1 1
1 0 0 1 0 0 0 2 2 1
1 1 1 1 1 1 1 1 1 1