老鼠出迷宫-java递归
需求:老鼠走迷宫,求出路径,已经走了多少步;
迷宫图如下:1代表是墙壁,0代表路;

设计思路:
1、用二维数组画出地图;
2、用递归的方法代表走路
2.1 10代表可以走的路 ; 1、代表墙壁不能走;2代表即将要走的路 ;3代表走过的路但是走不通
2.2 由于不是要求出最优解;可以用下 右 上 左的策略来走
代码实现:
public class MiGong{
public static void main(String[] args){
Mytools my = new Mytools();
//画棋盘
int[][] arr = new int[7][8];
for(int i=0;i<arr.length ;i++ ) {
for (int j = 0;j<arr[i].length; j++) {
//第一行和最后一行为1,1代表墙壁不能走
if(i == 0|| i == arr.length-1){
arr[i][j] = 1;
}
else if(i == 3){
if(j == 1||j==2||j==0||j==arr[i].length-1){
arr[i][j] = 1;
}
else{
arr[i][j] = 0;
}
}
//第一列行和最后一列=1,1代表墙壁不能走
else if(j == 0|| j == arr[i].length-1){
arr[i][j] = 1;
}
else{
arr[i][j] = 0;
}
}
}
arr[3][4] = 1;
arr[4][2] = 1;
arr[4][4] = 1;
arr[5][3] = 1;
System.out.println("迷宫的样式: " );
for(int i=0;i<arr.length ;i++ ) {
for (int j = 0;j<arr[i].length; j++) {
System.out.print(arr[i][j]+" " );
}
System.out.println();
System.out.println();
}
//用方法 准备走
my.findWay(arr,1,1);
//查看结果
int step = 0 ;
System.out.println("找路的结果 " );
for(int i=0;i<arr.length ;i++ ) {
for (int j = 0;j<arr[i].length; j++) {
if(arr[i][j] == 2){
step ++;
}
System.out.print(arr[i][j]+" " );
}
System.out.println();
}
System.out.println("需要"+(step-1)+"步");
}
}
class Mytools{
//0代表可以走,1代表障碍物,2代表要走的路,3代表走过了走不通
//X,y代表初始位置
//返回 true 代表找到,否则返回false。
public boolean findWay(int[][] map,int x,int y){
if(map[5][6] == 2){ //的时候说明已经结束
return true;
}
else{
if(map[x][y] == 0){ //的时候说明可以走
//假定能走通
map[x][y] = 2; // 可以走直接先赋值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{// 无路可走,之前假定走通的2需要改成3
map[x][y] = 3;
return false;
}
}
else{ //剩余的1、2、3、都是没必要测试的情况,直接返回False
return false;
}
}
//不是0和2的时候直接false 结束不能走
}
}
输出:

ps: 感觉代码直接贴上去看着眼睛很累,再附加一张图片吧,这是类、方法 模拟老鼠走路;

画棋盘:

实例化类、调用方法:

浙公网安备 33010602011771号