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


用非递归的栈来解决 

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

执行结果





  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值