迷宫回溯算法

递归

递归就是方法自己调用自己。

  1. 递归调用必须有结束条件
  2. 每一次调用要接近结束递归的条件,否则会栈溢出。
  3. 递归不能太深否则也会栈溢出

迷宫

  • 用二维数组数组模拟迷宫,数字1 表示墙,数字0表示没走过,数字2表示走过,数字3表示走不通。
  • 假设 从1,1 坐标开始走,走到 6,6 坐标表示走出迷宫
class Maze(){
//二维数组 模拟迷宫
		int[][] array;
//构造方法  传入迷宫数组的大小
		public Maze(int [][] array){
				this.array=array;
				//迷宫围墙 横
				for(int i=0;i<array[0].leng;i++){
					array[0][i]=1;
					array[array.leng-1][i]=1;
				}
				//迷宫围墙 竖
				for(int i=0;i<array.leng;i++){
					array[i][0]=1;
					array[i][array[0]-1]=1;
				}
				//迷宫内部  简单障碍物
				  array[2][2]=1;
				  array[2][1]=1;
		}

}
走迷宫方法
public  boolean run(int [][] array,int x,int y){
		//判断一下是否走出迷宫 
		if(arrya[6][6]==2){
			//表示走出迷宫 反回一个TRUE ,并输出迷宫
			System.out.prinltn(array);
			return turn;
		}
		//判断,此路是否走过  0表示没走过
		if(array[x][y]==0){
				//默认标记2 表示此坐标已走过,上下左右都走不同则走不同
				if(run(array,x+1,y)){
						return true;
				}else if(run(array,x-1,y)){
						return ture;
				}else if(run(array,x,y+1)){
						return true;
				}else if(run(array,x,y-1)){
						return true;
				}else if{
					//当发现4个方向都走不通是,把当前坐标修改内容修改为3
					array[x][y]=3;
				}
		
				
		}else{//走到这表示可能是 2已经走过 ,3无法走通,1是迷宫墙壁。返回false
				return false;
		}
		
}

测试程序

public  Test{
		public static void main(String[]args){
			//创建迷宫
			Maze maze=new Maze(new int[8][8]);
			//调用run方法
			maze.run(maze.array,1,1);
		}
}

迷宫回溯算法。

  • 该递归会继续上下左右尝试走出迷宫,若无法走出迷宫则会返回上一部,继续进行尝试
  • 列如递归会一直向下走,若能走到迷宫出口,则不需要回溯,若找不到,则会返回上一步,尝试往右左上走,直到把迷宫出口找出来或尝试完所有路径
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值