老鼠走迷宫算法

时间: 2023-07-09 admin IT培训

老鼠走迷宫算法

老鼠走迷宫算法

今天看了下老鼠走迷宫这个算法,只理解了选择一条路径的递归算法,但是对于选择出所有路径的算法没搞清楚,我给出一条路径算法的代码及详细注释,希望能抛砖引玉,引出大虾们对于求所有路径的带详细注释的代码!题目:老鼠走迷宫有个迷宫,2表示墙,0表示该点可以走,给出起始点和终结点,求出一条能走通的路径public class Mouse {private int startI, startJ; // 入口   private int endI, endJ; // 出口   private boolean success = false;   public static void main(String[] args)  { //迷宫 2表示墙 0表示可走int[][] maze = {{2, 2, 2, 2, 2, 2, 2},   {2, 0, 0, 0, 0, 0, 2},   {2, 0, 2, 0, 2, 0, 2},   {2, 0, 0, 0, 0, 2, 2},   {2, 2, 0, 2, 0, 2, 2},   {2, 0, 0, 0, 0, 0, 2},   { 2, 2, 2, 2, 2, 2, 2}};   System.out.println("显示迷宫:");   for(int i = 0; i < maze.length; i++){   for(int j = 0; j < maze[0].length; j++)  {if(maze[i][j] == 2)  {System.out.print("██");  }else  {System.out.print(" ");}}System.out.println();   }   Mouse mouse = new Mouse();   mouse.setStart(1, 1);   mouse.setEnd(5, 5);   if(!mouse.go(maze))  {   System.out.println("\n没有找到出口!");   }   else  { //打印出选择的路线System.out.println("\n找到出口!");   for(int i = 0; i < maze.length; i++)  {   for(int j = 0; j < maze[0].length; j++)  {   if(maze[i][j] == 2){System.out.print("██");   }else if(maze[i][j] == 1){System.out.print("$$");  }   else  {System.out.print(" ");   }}   System.out.println();   }   }   }   public void setStart(int i, int j)  {   this.startI = i;   this.startJ = j;   }   public void setEnd(int i, int j)  {   this.endI = i;   this.endJ = j;   }   public boolean go(int[][] maze)  {   return visit(maze, startI, startJ);   }   //核心算法 递归   private boolean visit(int[][] maze, int i, int j)  { //该点已走过,设置为1  maze[i][j] = 1;   if(i == endI && j == endJ)  { //到达结尾 返回成功success = true;   }//第一选择向右边走(右边如果已经走过 不再继续走 下同)if(!success && maze[i][j+1] == 0)  {visit(maze, i, j+1);   }//第二选择向下走if(!success && maze[i+1][j] == 0){visit(maze, i+1, j);  }//第三选择向左走if(!success && maze[i][j-1] == 0)  {visit(maze, i, j-1);   }//第四选择向右边走if(!success && maze[i-1][j] == 0)  {visit(maze, i-1, j);   }if(!success)  {//无路可走 将该点重新标志为0maze[i][j] = 0;  }   return success;   }   }扩展问题是老鼠走迷宫的所有路径,这个我没看明白,有哪位大虾有兴趣的写个带注释的发上来看看