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