穷举vs暴搜vs深搜vs回溯vs剪枝系列一>黄金矿工

目录

决策树:

代码设计

代码:

java 复制代码
class Solution {
    boolean[][] vis;
    int ret,m,n;

    public int getMaximumGold(int[][] grid) {
        m = grid.length;
        n = grid[0].length;
        vis = new boolean[m][n]; 

        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++){
                //剪枝
                if (grid[i][j] != 0 && !vis[i][j]){
                    vis[i][j] = true;
                    dfs(grid,i,j,grid[i][j]);
                    vis[i][j] = false;//回溯
                }
            }

        return ret;    
    }

    int[] dx = {-1,1,0,0};
    int[] dy = {0,0,-1,1};
    //这里局部变量会自己恢复现场
    private void dfs(int[][] grid, int i, int j, int path){

        ret = Math.max(ret,path);
        
        for(int k = 0; k < 4; k++){
            int x = i + dx[k];
            int y = j + dy[k];
            //剪枝
            if(x >= 0 && x < m && y >= 0 && y < n && !vis[x][y] && grid[x][y] != 0){
                vis[x][y] = true;
                dfs(grid,x,y,path + grid[x][y]);
                vis[x][y] = false;//回溯
            }
        }
    }
}
相关推荐
汀、人工智能7 分钟前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能18 分钟前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo23 分钟前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ025 分钟前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法
汀、人工智能37 分钟前
[特殊字符] 第76课:单词拆分
数据结构·算法·均值算法·前缀树·trie·单词拆分
Fcy6481 小时前
算法基础详解(五)二分算法——二分查找与二分答案
算法·二分算法
SteveSenna1 小时前
强化学习4.1:基于价值——Q-learning
人工智能·学习·算法·机器人
少许极端1 小时前
算法奇妙屋(四十四)-贪心算法学习之路11
java·学习·算法·贪心算法
子琦啊1 小时前
【算法复习】数组与双指针篇
javascript·算法
ambition202421 小时前
斐波那契取模问题的深入分析:为什么提前取模是关键的
c语言·数据结构·c++·算法·图论