老鼠走迷宫算法

今天看了下老鼠走迷宫这个算法,只理解了选择一条路径的递归算法,但是对于选择出所有路径的算法没搞清楚,我给出一条路径算法的代码及详细注释,希望能抛砖引玉,引出大虾们对于求所有路径的带详细注释的代码!

题目:老鼠走迷宫
  有个迷宫,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;   
  }   


}


  扩展问题是老鼠走迷宫的所有路径,这个我没看明白,有哪位大虾有兴趣的写个带注释的发上来看看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值