今天看了下老鼠走迷宫这个算法,只理解了选择一条路径的递归算法,但是对于选择出所有路径的算法没搞清楚,我给出一条路径算法的代码及详细注释,希望能抛砖引玉,引出大虾们对于求所有路径的带详细注释的代码!题目:老鼠走迷宫
     有个迷宫,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) 
       {//无路可走  将该点重新标志为0
              maze[i][j] = 0; 
       }  
           
        return success;    
   }   
}
    扩展问题是老鼠走迷宫的所有路径,这个我没看明白,有哪位大虾有兴趣的写个带注释的发上来看看