Java基础学习05
通过一道简单的算法题找路问题总结一下一些小结论。问题:在迷宫中找到一条通路并计算长度(2023-01-09)
解法:首先利用二维数组创建迷宫,创建一个类,调用类中的方法实现问题解决,方法的思想利用了递归的思路,二维数组中的每一个位置:0代表可以走但还未走,1表示障碍物,2表示已经走过能走通(但不需要再测试),3表示死路。
首先递归方法需要先完成结束条件,当在出口的时候数组的之的值置为2,即一条成功的通路由数字2构成。
其次当数组值为0的时候先将当前置为2,按照一定的顺序测试四个方位(上下左右)的位是否可取,即调用递归,每个位置都测试一次,为0 就覆盖为2,如果四周走不通,原来的位置置为3表示死路。
如何计算路径长度?
在类中设置一个静态的计数变量(cnt),静态变量独一份不会在调用结束时消失,同时要在类中设置一个Getter方法获取更新的cnt,这样保证能够在主函数中输出这个cnt的值。
总代吗如下
class Way{
public static int cnt=0;
public boolean FindWay(int[][] map,int i,int j){
if(map[6][5]==2){16:01:21
return true;
}else{
if(map[i][j]==0){
map[i][j]=2;
cnt++;
if(FindWay(map,i+1,j)){
return true;
}
if(FindWay(map,i,j+1)){
return true;
}
if(FindWay(map,i-1,j)){
return true;
}
if(FindWay(map,i,j-1)){
return true;
}else{
map[i][j]=3;
cnt--;
return false;
}
}else{
return false;
}
}
}
public static int getCnt() {
return cnt;
}