寻找迷宫的出路

来源:互联网 发布:出国才知中国好视频 编辑:程序博客网 时间:2024/04/30 08:02
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()方法检查当前坐标的值是否为1grid[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=7grid[row][column]=PATH;}}return done;}private boolean valid(int row,int column){   //判断是当前坐标上的数字是否为1,是则返回true,否则返回falseboolean 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!");elseSystem.out.println("There is no possible path.");System.out.println(labyrinth);}}



 

原创粉丝点击