从N X N的方格迷宫中,左上角走到右下角,设计一个boolean数组记录迷宫格子,如果为true就可以走,如果为
false就不能走,每一步只能忘右或者往下走,利用动态规划解决,行为row,列为col,所以每个状态dp(row,col)=
dp(row+1,col)+dp(row,col+1)。java实现的代码如下:
public class Solution {
public static void main(String[] args) {
boolean[][] maze = {{true,true,true,true,true,true,true,true},
{true,true,false,true,true,true,false,true},
{true,true,true,true,false,true,true,true},
{false,true,false,true,true,false,true,true},
{true,true,false,true,true,true,true,true},
{true,true,true,false,false,true,false,true},
{true,false,true,true,true,false,true,true},
{true,true,true,true,true,true,true,true}};
Solution path = new Solution();
int result = path.countPath(maze, 0, 0);
System.out.println(result);
}
int countPath(boolean[][] grid,int row,int col){
if(!validSquare(grid,row,col)) return 0;
if(isAtEnd(grid,row,col)) return 1;
else return countPath(grid,row+1,col)+countPath(grid,row,col+1);
}
boolean validSquare(boolean[][] grid,int row,int col){
if(row< grid.length && col < grid.length) {
return !(grid[row][col]==false);}
return false;
}
boolean isAtEnd(boolean[][] grid,int row,int col){
if(row==grid.length-1 && col==grid[row].length-1) return true;
else return false;
}
}