出界的路径数(记忆化bfs)

Posted 秦枫-_-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了出界的路径数(记忆化bfs)相关的知识,希望对你有一定的参考价值。


记忆化dfs 已遍历过的点他的方案数已知晓 所以无需重新遍历

class Solution {
    int MOD = (int)1e9 + 7;
    int[][][] dp;
    int m1,n1,maxstep=0;
    public int findPaths(int m, int n, int maxMove, int startRow, int startColumn) {
        m1=m;n1=n;maxstep=maxMove;
        dp=new int[m][n][maxMove+1];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                Arrays.fill(dp[i][j], -1);
            }
        }
        return dfs(0, startRow, startColumn);
    }
   public int dfs(int step, int r, int c) {
        if (r >= m1 || c >= n1 || r < 0 || c < 0) {//越界+1
            return 1;
        }
        if (step >= maxstep) {//步数超限,但没越界应该返回0
            return 0;
        }
        if (dp[r][c][step] != -1) {//表示这个点已经遍历过了,所以无需再次遍历
            return dp[r][c][step];
        }
         dp[r][c][step]= 0;//未遍历的点当前方案数应该初始化置0
         dp[r][c][step]=(dp[r][c][step]+dfs(step + 1, r + 1, c) % MOD)%MOD;
         dp[r][c][step]=(dp[r][c][step]+dfs(step + 1, r - 1, c) % MOD)%MOD;
         dp[r][c][step]=(dp[r][c][step]+dfs(step + 1, r, c + 1) % MOD)%MOD;
         dp[r][c][step]=(dp[r][c][step]+dfs(step + 1, r, c - 1) % MOD)%MOD;
        return  dp[r][c][step];
    }
}

以上是关于出界的路径数(记忆化bfs)的主要内容,如果未能解决你的问题,请参考以下文章

出界的路径数--dfs记忆化+剪枝

leetcode 576. 出界的路径数

Party BFS搜索最长路径 + 记忆化剪枝 || dfs(逆向思维找父亲)

leetcode之最短路径+记忆化dfs+bfs+动态规划刷题总结

[CF1070A] Find a Number - BFS,记忆化搜索

BZOJ 1415 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)