回溯法解决迷宫问题
来源:互联网 发布:淮南腾讯大数据 编辑:程序博客网 时间:2024/06/05 09:27
import java.awt.Point;import java.util.ArrayList;/*回溯法走迷宫 * 定义一个二维数组:int maze[5][5] = {0, 1, 0, 1, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。 输入:一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。 输出:左上角到右下角的最短路径,格式如样例所示。样例输入:0 1 0 1 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0样例输出:(0, 0)(1, 0)(2, 0)(2, 1)(2, 2)(2, 3)(2, 4)(3, 4)(4, 4) */public class Maze { private int[][] maze; private int maxLine= 5; private int maxRow= 5; private ArrayList<Point> list=null; public static void main(String[] args) { new Maze().initialise();} private void initialise(){ maze=new int[][] {{0, 1, 0, 1, 0},{0, 1, 0, 1, 0},{0, 0, 0, 0, 0},{0, 1, 1, 1, 0},{0, 0, 0, 1, 0},};list=new ArrayList<Point>();check(0, 0); } private void check(int i,int j){ if(i==maxRow-1&&j==maxLine-1) {print();return; } //向上走 if(canMove(i, j, i-1, j)){ Point p=new Point(i, j); maze[i][j]=-1; list.add(p); check(i-1, j); maze[i][j]=0; list.remove(p); } //向下走 if(canMove(i, j, i+1, j)){ Point p=new Point(i, j); maze[i][j]=-1; list.add(p); check(i+1, j); maze[i][j]=0; list.remove(p); } //向左走 if(canMove(i, j, i, j-1)){ Point p=new Point(i, j); maze[i][j]=-1; list.add(p); check(i, j-1); maze[i][j]=0; list.remove(p); } //向右走 if(canMove(i, j, i, j+1)){ Point p=new Point(i, j); maze[i][j]=-1; list.add(p); check(i, j+1); maze[i][j]=0; list.remove(p); } } private boolean canMove(int i,int j,int targetI,int targetJ){ if(targetI<0||targetJ<0||targetI>maxRow-1||targetJ>maxLine-1) return false; if(maze[targetI][targetJ]==1) return false; if(maze[targetI][targetJ]==-1) return false; return true; } private void print(){ for (Point point : list) System.out.println("("+(int)point.getX()+", "+(int)point.getY()+")"); System.out.println("(4, 4)"); }}
0 0
- 回溯法解决迷宫问题
- 回溯法解决迷宫问题
- 回溯法解决迷宫问题
- scala 回溯法解决迷宫问题
- 回溯法解决迷宫搜索问题
- 回溯算法解决迷宫问题
- 迷宫问题 回溯法
- 回溯法-迷宫问题
- 回溯法解决迷宫问题(方法1---递归)
- 回溯法解决迷宫问题(方法2--栈)
- 回溯法求迷宫问题
- 回溯法解迷宫问题
- 回溯法解迷宫问题
- 回溯法求迷宫问题
- 回溯法求迷宫问题
- 回溯法求解迷宫问题
- 迷宫问题 (上)栈 回溯法
- 迷宫问题——回溯法解
- linux grep命令
- K-mean聚类的一个代码的详细注释
- 四.LRU删除机制与永久数据被T
- vs2015配置OpenMesh
- Eclipse ADT 添加keystore的方法
- 回溯法解决迷宫问题
- Android_UI: EditText
- Win7通过Anaconda3中安装Tensorflow
- JS的基本数据结构实现---栈和队列
- android使用友盟推送注册失败获取不到token accs bindapp error!
- 最小生成树的PRIM算法
- Java Core 第9版 读书笔记(OOP) Part2
- grade中在线添加依赖无效不下载的问题和.MainActivity did not call through to super.onCreate()
- 《鸟哥的Linux学习:基础篇》第六章:Linux文件和=目录管理