关于java迷宫算法核心(非递归)
来源:互联网 发布:装修公司加入网络平台 编辑:程序博客网 时间:2024/06/17 14:18
用非递归的栈来解决
class Maze{
private int row;
private int colum;
private MazeNode[][] mazePath;
private SqStack stack;
public Maze(int row, int colum){
this.row = row;
this.colum = colum;
mazePath = new MazeNode[this.row][this.colum];
stack = new SqStack();
}
public void setPath(int i, int j, int value){
mazePath[i][j] = new MazeNode(value, i, j);
}
//该函数主要用来更改迷宫节点四个方向的行走状态
public void adjustMazePath(){
for(int i=0;i<row;i++){
for(int j=0;j<colum;j++){
if(i<this.row-1 && j<this.colum-1 && mazePath[i][j].getValue() == 0){
if(j<colum-1 && mazePath[i][j+1].getValue() == 0){
mazePath[i][j].setPathState(Constant.WAY_EAST, Constant.WAY_ENABLE);
}
if(j<row-1 && mazePath[i+1][j].getValue() == 0){
mazePath[i][j].setPathState(Constant.WAY_SOUTH, Constant.WAY_ENABLE);
}
if(j>0 && mazePath[i][j-1].getValue() == 0){
mazePath[i][j].setPathState(Constant.WAY_WEST, Constant.WAY_ENABLE);
}
if(i>0 && mazePath[i-1][j].getValue() == 0){
mazePath[i][j].setPathState(Constant.WAY_NORTH, Constant.WAY_ENABLE);
}
}
}
}
}
//开始寻找迷宫路径
public void findMazePath(){
System.out.println("chenkai");
int i=0,j=0;
stack.push(this.mazePath[i][j]);
MazeNode top;
while(!stack.empty()){
try {
Thread.sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
top = stack.top();
System.out.println(mazePath[4][2].getPath()[0]);
if(top.getRow() == this.row-1 && top.getCol() == this.colum-1)
break;
if(top.getRow() == this.row-1 && mazePath[top.getRow()][top.getCol()+1].getValue() == 0 ){
stack.push(mazePath[top.getRow()][top.getCol()+1]);
continue;
}
if(top.getCol() == this.colum-1 && mazePath[top.getRow()+1][top.getCol()].getValue() == 0){
stack.push(mazePath[top.getRow()+1][top.getCol()]);
continue;
}
//东
if(top.getCol()+1<this.colum && mazePath[top.getRow()][top.getCol()].getPath()[0] == Constant.WAY_ENABLE ){
mazePath[top.getRow()][top.getCol()+1].getPath()[2] = Constant.WAY_DISABLE;
System.out.println(top);
System.out.println("dong");
stack.push(mazePath[top.getRow()][top.getCol()+1]);
continue;
}
//南
if(top.getRow()+1<this.row && mazePath[top.getRow()][top.getCol()].getPath()[1] == Constant.WAY_ENABLE ){
mazePath[top.getRow()+1][top.getCol()].getPath()[3] = Constant.WAY_DISABLE;
System.out.println(top);
System.out.println("nan");
stack.push(mazePath[top.getRow()+1][top.getCol()]);
continue;
}
//西
if(top.getCol()-1>0 && mazePath[top.getRow()][top.getCol()].getPath()[2] == Constant.WAY_ENABLE ){
mazePath[top.getRow()][top.getCol()-1].getPath()[0] = Constant.WAY_DISABLE;
System.out.println(top);
System.out.println("xi");
stack.push(mazePath[top.getRow()][top.getCol()-1]);
continue;
}
//北
if(top.getRow()-1>0 && mazePath[top.getRow()][top.getCol()].getPath()[3] == Constant.WAY_ENABLE ){
mazePath[top.getRow()][top.getCol()-1].getPath()[1] = Constant.WAY_DISABLE;
System.out.println(top);
System.out.println("bei");
stack.push(mazePath[top.getRow()-1][top.getCol()]);
continue;
}
stack.pop();
}
}
//打印最终的迷宫路径信息
public void showMazePath(){
System.out.println(stack.empty());
while(!stack.empty()){
stack.top().setValue(2);
stack.pop();
}
for(int i=0;i<this.row;i++){
for(int j=0;j<this.colum;j++){
System.out.print(this.mazePath[i][j].getValue()+" ");
}
System.out.println();
}
}
执行结果
- 关于java迷宫算法核心(非递归)
- 数据结构与算法(Java描述)-17、递归转化成非递归算法以及迷宫算法
- 迷宫问题 非递归(java版)
- 迷宫的非递归算法
- 使用非递归算法解决迷宫问题
- (递归+非递归)迷宫求解
- 递归与非递归实现走迷宫算法
- 使用递归方式写的走迷宫算法(Java)
- Java 二分查找算法(递归和非递归)
- 爬楼梯算法-java(递归与非递归)
- Java 递归算法解迷宫问题
- 走迷宫问题——非递归算法
- 关于java递归算法
- 小型迷宫实现---迷宫算法(递归回溯法)
- 递归算法的应用(迷宫)
- 迷宫递归算法
- 迷宫问题递归算法
- java算法:折半查找(递归算法和非递归算法)
- Q
- 【NOIP2017模拟11.3】总结
- 这个代码先存着
- dashboard无法查到endpoint, counter
- C++中模板的特化与偏特化
- 关于java迷宫算法核心(非递归)
- 栈的概念和实现
- C++之重命名问题
- Jmeter常用控件详解
- String字符串
- 前端进阶(1)
- 11.3模拟赛总结
- 《深入理解计算机系统》----总结
- Matlab实例