您的位置:首页 > 编程语言 > Java开发

关于java迷宫算法核心(非递归)

2017-11-03 22:42 363 查看
用非递归的栈来解决 

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();
}
}

执行结果
97b8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: