穷举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;//回溯
            }
        }
    }
}
相关推荐
风筝在晴天搁浅1 小时前
代码随想录 718.最长重复子数组
算法
kyle~1 小时前
算法---回溯算法
算法
star _chen1 小时前
C++实现完美洗牌算法
开发语言·c++·算法
hzxxxxxxx1 小时前
1234567
算法
Sylvia-girl2 小时前
数据结构之复杂度
数据结构·算法
CQ_YM2 小时前
数据结构之队列
c语言·数据结构·算法·
VekiSon2 小时前
数据结构与算法——树和哈希表
数据结构·算法
大江东去浪淘尽千古风流人物4 小时前
【DSP】向量化操作的误差来源分析及其经典解决方案
linux·运维·人工智能·算法·vr·dsp开发·mr
Unstoppable224 小时前
代码随想录算法训练营第 56 天 | 拓扑排序精讲、Dijkstra(朴素版)精讲
java·数据结构·算法·
饕餮怪程序猿4 小时前
A*算法(C++实现)
开发语言·c++·算法