java迷宫,用数组存储迷宫,用栈存储通路位置,无法打印通路,求指教
import java.util.*;
public class Maze{
public static void main(String args[]){
Stack mazeStack=new Stack(); //不能用StackClass来声明栈,也不能指定栈的长度
int i,j;
int[][] mm={{0,0,1,0,1},{1,0,1,1,1},{0,0,0,1,1},{0,1,1,0,1},{0,0,1,0,0},{1,0,0,0,0}};
DetailOfMaze[][] maze=new DetailOfMaze[6][5];
for(i=0;i<6;i++){
for(j=0;j<5;j++){
maze[i][j]=new DetailOfMaze();
maze[i][j].mazeNode=mm[i][j];
maze[i][j].footPrint=false;
}
}
i=0;
j=0;
do{
maze[i][j].footPrint=true;
if(maze[i][j].mazeNode==0) {//若当前位置可通
mazeStack.push(i);
mazeStack.push(j);//将当前位置压入栈顶
if(i==5 && j==4)//若当前位置为出口
break;//退出
else{// 当前位置的邻块换为当前位置
if(maze[i][j+1].footPrint==false && j<4)
j=j+1;//向右走
else if(maze[i+1][j].footPrint==false && i<5)
i=i+1;//向下走
else if(maze[i][j-1].footPrint==false && j>0)
j=j-1;//向左走
else if(maze[i-1][j].footPrint==false && j>1)
i=i-1;//向上走
}
}
else{
if(!mazeStack.empty()) {
// 当前位置的逆时针邻块换为当前位置
if (i>0 && i<6 && j>0 && j<4 && maze[i][j-1].footPrint==true && maze[i+1][j-1].footPrint==false )
{i=i+1;j=j-1;}//向下走
else if ( i>0 && i<5 && j>0 && j<4 && maze[i-1][j].footPrint==true && maze[i-1][j-1].footPrint==false )
{i=i-1;j=j-1;}//向左走
else if ( i>0 && i<5 && j>0 && j<4 && maze[i][j+1].footPrint==true && maze[i-1][j+1].footPrint==false )
{i=i-1;j=j+1;}//向上走
else {
mazeStack.pop();
mazeStack.pop();
if(!mazeStack.empty()){
Integer J=(Integer)mazeStack.pop();//line 50
j=J.intValue();
Integer I=(Integer)mazeStack.pop();
i=I.intValue();
}
}
}
}
}while(!mazeStack.empty());
//标记通道
while(!mazeStack.empty()) {
Integer J=(Integer)mazeStack.pop();
int pj=J.intValue();
Integer I=(Integer)mazeStack.pop();
int pi=I.intValue();
maze[pi][pj].mazeNode=8;
}
//打印有通路的迷宫
for(i=0;i<6;i++){
for(j=0;j<5;j++){
System.out.print(maze[i][j].mazeNode);
}
System.out.println();
}
System.out.println("\n");
}
}
//存储某个路口的信息
class DetailOfMaze{
int mazeNode,x,y;
boolean footPrint; //是否被访问
}
在最后打印出来的是原来的迷宫,为什么不能打印标记通道后的迷宫呢?是标记的那个方法写错了吗?求指教!
[解决办法]
结帖率:0.00%
[解决办法]