递归
简介
小案例
递归调用机制
可以解决的问题?
使用递归时需要遵守的规则
迷宫问题
思路
这里的map是引用类型变量,在整个过程中,无论产生多少个栈,用到都是同一个引用类型变量map
package datastructres.recursion;
/**
* @author :Yan Guang
* @date :Created in 2021/1/15 11:18
* @description:
*/
public class MiGong {
public static void main(String[] args) {
int[][] map = new int[8][7];
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[7][i] = 1;
}
for (int i = 0; i < 8; i++) {
map[i][0] = 1;
map[i][6] = 1;
}
map[3][1] = 1;
map[3][2] = 1;
for (int[] row : map) {
for (int list : row) {
System.out.printf("%d\t", list);
}
System.out.println();
}
setWay(map,1,1);
System.out.println("走完迷宫之后的棋盘:");
for (int[] row : map) {
for (int list : row) {
System.out.printf("%d\t", list);
}
System.out.println();
}
}
public static boolean setWay(int[][] map, int i, int j) {
if (map[6][5] == 2) {
return true;
//只要未到达终点,游戏继续
} else {
//如果该节点还没走过
if (map[i][j] == 0) {
//初始化该节点
map[i][j]=2;
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 if(setWay(map,i,j-1)){
return true;
}else {
map[i][j]=3;
return false;
}
}else{
return false;
}
}
}
}
总结一下
思路就是首先设计一个走路的方式就是下右左上,如果都走不通的话,那么就返回一个3,说明是死路,设计好了走路的方式之后呢,就判断如果路没走过就用我们的走路方式去走,如果走过了,就直接return false,然后走到一个新的节点,就用我们的方式去递归,继续在新的节点的基础上,以我们的方式去走,走到最后,发现都走通了,就返回true。