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

寻找迷宫的出路

2013-04-23 16:47 197 查看
public class Maze {
private final int TRIED=3;   //标识这个点已走过
private final int PATH=7;	//标识这个点是通路
private int [] [] grid={{1,1,1,0,1,1,0,0,0,1,1,1,1},
{1,0,1,1,1,0,1,1,1,1,0,0,1},
{0,0,0,0,1,0,1,0,1,0,1,0,0},
{1,1,1,0,1,1,1,0,1,0,1,1,1},
{1,0,1,0,0,0,0,1,1,1,0,0,1},
{1,0,1,1,1,1,1,1,0,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1,1,1,1,1}};
public boolean traverse(int row,int column){    //遍历当前位置的上下左右是否有通路
boolean done=false;
if(valid(row,column)){   //调用valind()方法检查当前坐标的值是否为1
grid[row][column]=TRIED;
if(row==grid.length-1&&column==grid[0].length-1)    //递归调用的出口,当前坐标是迷宫的出口
done=true;
else{
done=traverse(row+1,column);   //检查当前坐标的下方是否为通路
if(!done){
done=traverse(row,column+1);//检查当前坐标的右方是否为通路
}
if(!done)
done=traverse(row-1,column); //检查当前坐标上方是否为通路
if(!done)
done=traverse(row,column-1);//检查当前坐标左方是否为通路
}
if(done){    // 如果是通路,怎么把当前坐标的数字改为PATH=7
grid[row][column]=PATH;
}
}
return done;
}
private boolean valid(int row,int column){   //判断是当前坐标上的数字是否为1,是则返回true,否则返回false
boolean result=false;
if(row>=0&&row<grid.length&&column>=0&&column<grid[row].length)  // 检查当前坐标的合法性
if(grid[row][column]==1)
result=true;
return result;
}
public String toString(){  //覆盖toString()方法,用来输出数组
String result="\n";
for(int row=0;row<grid.length;row++){
for(int column=0;column<grid[row].length;column++){
result+=grid[row][column]+"";
}
result+="\n";

}
return result;
}

}
public class MazeSearch {
public static void main(String[] args){
Maze labyrinth=new Maze();
System.out.println(labyrinth);
if(labyrinth.traverse(0,0 ))
System.out.println("The maze was successfully traversed!");
else
System.out.println("There is no possible path.");
System.out.println(labyrinth);
}

}


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