java递归--迷宫问题
1.规则:0表示可以走 1表示障碍物 2 表示走的路线 3 表示上下左右都走过,但是走不通是死路;
2.地图绘制
for(int i=0;i<7;i++){
map[0][i]=1;
map[7][i]=1;
}//最上面和最下面为1
for(int i=0;i<8;i++){
map[i][0]=1;
map[i][6]=1;
}//最左边和最右边为1
障碍物可以自行添加如:map[3][1]=1,map[3][2]=1;
3.函数构建(在类中使用,对象来调用)
public boolean findWay(int[][] map,int i,int j){ if(map[6][5]==2){ return true; //到这里就结束了 不会进入其他if else了 }else{ //在没到终点的情况下,才去进行找路 if(map[i][j]==0){ map[i][j]=2; if(findWay(map,i+1,j)){ //判断下一个位置是否符合要求是否到终点或者是等于0,符合的话,就进入新一轮的循环 return true;//下右上左 }else if(findWay(map,i,j+1)){ return true; }else if(findWay(map,i-1,j)){ return true; }else if(findWay(map,i,j-1)){ return true; }else{ map[i][j]=3; return false; } }else{ //map[i][j]=1,2,3,2表示已经走过了的路线 return false; } } }
4.回溯
返回true就进入下一轮,下一轮返回false 就返回上一轮,下一轮前后左右都走不了了或者进入已经走过的路线或者碰过障碍物从而返回上一轮的现象就是回溯;
简单的说,回溯可以通过改变障碍物的布局来产生回溯,从而改变路线;
5.调用
int[][] map=new int[8][7]; cat1.findWay(map,1,1); System.out.println("============找路的情况============"); for(int i=0;i<map.length;i++){ for(int j=0;j<map[i].length;j++){ System.out.print(map[i][j]); }
6.心得:
首先迷宫问题需要制定规则,比如0代表什么,因为0是默认的值,最好是0代表可以走的路,1代表什么,接着就是设置边界,最外面一层都是边界,使用for循环设置边界,最后使用for循环产生地图;
其次就是函数得构造,返回值是boolean类型,返回true就进入下一轮,返回false就返回上一轮,到终点后就退出循环,根据终点来设置程序,采用if-else结构;
最后使用对象进行调用;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)