当前位置: 代码迷 >> Java相关 >> java迷宫,用数组储存迷宫,用栈存储通路位置,无法打印通路,求指教
  详细解决方案

java迷宫,用数组储存迷宫,用栈存储通路位置,无法打印通路,求指教

热度:2005   发布时间:2013-02-25 21:43:28.0
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();
  相关解决方案