迷宫项目实现设计文档
项目介绍:
有一个由单元格所构成的网格迷宫, 它是由n行m列组成的, 每个单元格, 其要么是代表空地的用0表示的那种, 要么是代表障碍物的用1表示的那种。现在你的任务是, 去找出一条从起点到终点的移动序列, 而移动时只能朝着上下左右这几个方向, 移动到相邻的单元格那里。并且在任何时候, 都不可以处在有障碍物存在的单元格当中, 同时也不能走到这个迷宫的范围之外。这里起点是在左上角, 终点是在右下角。
项目功能:
把迷宫路径查找问题予以解决, 去寻觅一条从左上角迷宫内入口起始直至右下角迷宫出口的具备有效性的路径, 其中0表示能够通行, 1表示无法行走, 要是找到的话就输出最终的迷宫以及路径方面的信息, 要是找寻不到则输出不存在有效路径。
项目所用知识点:
采用Java面向对象思想,二维数组以及非递归栈进行实现
项目实现思路:
1.定义一个迷宫节点类型()的二维数组
2.挨个初始化每一个格子当中所蕴含的 value 值。往二维数组的每个格子里放置对象。对象的 value 值限定只能是 0(这意味着当前格子能够通行)或者是 1(这意味着当前格子不可以通行)。
3.建造围墙, 能够切实防止越界情形。依据当前节点周边四个方位格子里的value数值, 判定当前节点的上下以及左右四个方向可不可以通行(0表示可以通行, 1表示不可以通行)。
4.从起始点开始, 朝着迷宫进发。运用栈操作的方式, 对行走的路径予以记录, 首先把元素放进栈里。据此判断当前处于栈顶那个元素, 其各个方向之中, 哪些存在可行可走的方向, 从中选择其一。把这个可走方向朝着栈里进行入栈操作, 持续这般操作, 一直到抵达右下角的元素方才停止。在此期间, 栈里面保存着已经走过的路径。需要留意的是, 要是碰到步入死胡同的状况, 此时所面临的此元素, 它既是栈顶元素, 同时该栈顶元素再观察其四个方向发现都没办法实行行走操作。那么在这种情形下, 便把这个栈顶元素从栈里移出, 转而挑选新的方向, 再次开展入栈操作。然后持续进行此步骤, 一直到抵达右下角元素才就此完全截止。
项目实现:
Maze类
importjava.util.Scanner; publicclassMaze{ privateMazeNode[][]mazenode; privateintrow;//行 privateintcolum;//列 publicMaze(){ } publicvoidinnode(){//添加迷宫路径; Scannerscanner=newScanner(System.in); System.out.println("请输入迷宫行数和列数"); row=scanner.nextInt()+2;//为后面加围墙 colum=scanner.nextInt()+2; System.out.println("请输入迷宫路径:"); mazenode=newMazeNode[row][colum]; build(mazenode);//创建一个row行colum列的mazenode并且把value值都给1 for(inti=1;i类
publicclassMazeNode{ publicintindex1; publicintindex2; publicintvalue; publicMazeNode(intvalue,intindex1,intindex2){ this.value=value; this.index1=index1;//下标1 this.index2=index2;//下标2 } //改变找个点的值为2 publicvoidchangeValue(MazeNode[][]mazeNode,intindex1,intindex2){ mazeNode[index1][index2].value=2; } //判断左边是否可走 publicbooleanleft(MazeNode[][]mazeNode,intindex1,intindex2){ if(mazeNode[index1][index2].value==0){ returntrue; }returnfalse; } //判断上边是否可走 publicbooleanup(MazeNode[][]mazeNode,intindex1,intindex2){ if(mazeNode[index1][index2].value==0){ returntrue; }returnfalse; } //判断右边是否可走 publicbooleanright(MazeNode[][]mazeNode,intindex1,intindex2){ if(mazeNode[index1][index2].value==0){ returntrue; }returnfalse; } //判断下边是否可走 publicbooleandown(MazeNode[][]mazeNode,intindex1,intindex2){ if(mazeNode[index1][index2].value==0){ returntrue; }returnfalse; } }类//栈
importjava.util.Arrays; importjava.util.EmptyStackException; publicclassMyStack{ privatePuzzleValue[]array2; privateMazeNode[]array; privateintsize; privatefinalintINITSIZE=10; publicMyStack(){ array=newMazeNode[INITSIZE]; array2=newPuzzleValue[INITSIZE]; } //查找栈内是否存在此路径 publicbooleancontain(MyStackstack,MazeNode[][]mazeNode,intindex1,intindex2){ for(inti=0;i>1)); }else{ array[size]=mazeNode; size++; } } //出栈 publicvoidpop(MazeNodemazeNode){ if(size==0){ return; }else{ array[size]=null; size--; } } //获得栈顶元素 publicMazeNodegettop(){ returnarray[size-1]; } //改变栈内的value值 publicvoidtoRoute(){ for(inti=0;i截至此处这段围绕着java探寻迷宫路径所展开的简易实现范例的文章就叙述到这儿了, 更多与之相关的关于java探寻迷宫路径的内容可去搜寻毛票票往昔的文章, 或者持续浏览下面的相关文章哦, 希望诸位往后能多多支持毛票票!