思路
所谓递归,就是自己调用自己,让某个参数在一次又一次的调用之中向跳出递归的结果靠近
对于迷宫的问题,就是怎么判断哪里有墙,怎么判断这条路接下去能不能走通,而不是只考虑下一步.但是迷宫是一步一步走下去的,所以这就正好可以使用递归的思想.
我们可以设计一个递归的方法,把到达出口设置为跳出的条件,把下一条路能走通定义为true,不能走通就为false.如果针对下一步返回的是true,那程序就会在下一步的基础上再调用依次该方法,判断下一步的下一步能否走通,只要出现了走不通的情况,就会逐层返回flase.这就是代码的一个思路
整体代码
public class MiGong {
public static void main(String[] args) {
int[][] map = makeAMiGong();
//在此迷宫中,出发点为map[1][1],终点为map[6][5]
findWay(map,1,1);
System.out.println("结果如下==================");
for (int[] ints : map) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
//2的路线就是找到出口的路径
}
public static int[][] makeAMiGong(){
///用二维数组表示迷宫
int[][] map = new int[8][7];
//用1来表示墙
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; j++) {
if (i == 0 || i == map.length - 1 || j ==0 || j == map[i].length - 1)
map[i][j] = 1;
}
}
map[3][1] = 1;
map[3][2] = 1;
System.out.println("创建了以下地图==============");
for (int[] ints : map) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
return map;
}
//寻址方法
//为了找到最短路径,所以搜索通路的顺序用下右上左的顺序
public static boolean findWay(int[][] map,int x,int y) {
//将走过的标为2
if (map[6][5] == 2){
return true;
}else{
if (map[x][y] == 0){
//当前此点未走过
//先将此点设为2
map[x][y] = 2;
//先向下
if (findWay(map,x+1,y)){
//如果向下走可以走通
return true;
}else if (findWay(map,x,y+1)){
//如果向下走可以走通
return true;
}else if (findWay(map,x-1,y)) {
//如果向上走可以走通
return true;
}else if (findWay(map,x,y-1)){
//如果向左走可以走通
return true;
}else{
//发现是死路一条
map[x][y] = 3; //将当前点设为3,表示走过,但不通
return false;
}
}else{
//如果该点已被走过或者为墙(不为0)
return false;
}
}
}
}
版权声明:本文为zznanyou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。