穷举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;//回溯
            }
        }
    }
}
相关推荐
亓才孓3 分钟前
java中的Math.Radom拓展
开发语言·python·算法
霍田煜熙12 分钟前
CBMS最新源码
算法
NAGNIP24 分钟前
主流的激活函数有哪些?
算法
NAGNIP26 分钟前
Self-Attention 为什么要做 QKV 的线性变换?又为什么要做 Softmax?
算法
core51242 分钟前
PageRank 算法:互联网的“人气投票”
算法·pagerank
小白菜又菜1 小时前
Leetcode 1523. Count Odd Numbers in an Interval Range
算法·leetcode
你们补药再卷啦1 小时前
人工智能算法概览
人工智能·算法
cnxy1881 小时前
围棋对弈Python程序开发完整指南:步骤3 - 气(Liberties)的计算算法设计
python·算法·深度优先
AndrewHZ1 小时前
【图像处理基石】什么是光栅化?
图像处理·人工智能·算法·计算机视觉·3d·图形渲染·光栅化
小白菜又菜2 小时前
Leetcode 944. Delete Columns to Make Sorted
算法·leetcode