老鼠走迷宫算法
- 老鼠走迷宫算法 推荐度:
- 相关推荐
老鼠走迷宫算法
今天看了下老鼠走迷宫这个算法,只理解了选择一条路径的递归算法,但是对于选择出所有路径的算法没搞清楚,我给出一条路径算法的代码及详细注释,希望能抛砖引玉,引出大虾们对于求所有路径的带详细注释的代码!题目:老鼠走迷宫有个迷宫,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; } }扩展问题是老鼠走迷宫的所有路径,这个我没看明白,有哪位大虾有兴趣的写个带注释的发上来看看
最新文章
- springboot项目搭建0000
- 闲话权限系统的设计
- echarts tooltip层级
- 安装MinGW和MSYS
- mmap()
- FPGA设计中,产生LFSR伪随机数
- Linux 磁盘管理
- C语言:void的用法即解析
- 积累的VC编程小技巧之打印相关
- 浅谈Android之SurfaceFlinger相关介绍(一)
- postgresql 命令行操作
- TCP Socket与TCP 连接
- pgpool
- HTML5通过js调用手机摄像头
- 磁盘分区形式:主启动记录(MBR)和全局唯一标识分区表(GPT)
- 装机、做系统必备:秒懂MBR和GPT分区表
- 【Spring Boot JPA】ManyToOne OneToMany学习笔记