走出迷宫
题目
一个二维数组里面都是由1和0组成1为可以走的路0为不可以走的路一直老鼠从左上角到达右下角每次只能走一步下和右 找到合适的路径
思路
方法1:回溯法
每走一步验证一下这一步是否可以走定义一个函数public static Boolean isSafe(int maze[][], int x, int y),记录老鼠所走的路径,每一步 public static Boolean getPath(int[][] maze,int x,int y,int[][] sol) sol数组用来记录走过的路径
伪代码:.
if(这一步是最后一步并且为可以走的) return true;
if(这一步是可以走的)
继续往下走
如果下一步不可以走
回溯到上一步
下面就看代码实现:
//判断走的这一步是否是可以走的
public static Boolean isSafe(int maze[][], int x, int y) {
return (x >= 0 && y >= 0 && x < maze.length && y < maze[0].length && maze[x][y] == 1);
}
/**
* 得到走过的路径
* @param maze 原数组
* @param x 行
* @param y 列
* @param sol 已经走过的路径
* @return
*/
public static Boolean getPath(int[][] maze,int x,int y,int[][] sol){
int row=maze.length;
int col=maze[0].length;
//到达最下角
if (x==row-1 && y==col-1){
sol[x][y]=1;
return true;
}
//如果这一步是可以走的
if (isSafe(maze,x,y)){
sol[x][y]=1;
//继续向下走
if(getPath(maze,x+1,y,sol))
return true;
if(getPath(maze,x,y+1,sol))
return true;
//如果下一步不能走的话回溯到上一步
sol[x][y]=0;
return false;
}
return false;
}
public static void main(String[] args) {
int maze[][]={{1,0,0,0},
{1,1,0,1},
{0,1,0,0},
{0,1,0,1}};
int sol[][]={{0,0,0,0},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}};
if (getPath(maze,0,0,sol)){
System.out.println("路径可到达");
}else {
System.out.println("路径不可达");
}
}