1219. 黄金矿工

1219. 黄金矿工

把之前写的DFS稍微一改就过了,没有进行过多的优化,30ms,还是挺慢的

class Solution {
	int res = Integer.MIN_VALUE;
	int[][] dir = new int[][] { { 0, 1 }, { 0, -1 }, { 1, 0 }, { -1, 0 } };
	int r;
	int c;
	int[][] map;
	boolean[][] vis;
	public int getMaximumGold(int[][] grid) {
		r = grid.length;
		c = grid[0].length;
		map = new int[r][c];
		vis = new boolean[r][c];
		for (int i = 0; i < r; i++) {
			for (int j = 0; j < c; j++) {
				map[i][j] = grid[i][j];
			}
		}
		for (int i = 0; i < r; i++) {
			for (int j = 0; j < c; j++) {
				if(map[i][j] != 0) {
					vis[i][j] = true;
					dfs(i, j, 0);
					vis[i][j] = false;
				}
			}
		}
		return res;
	}

	public void dfs(int i, int j, int gold) {
    	res = Math.max(res, gold);
    	for(int[] d : dir) {
    		int newx = i + d[0];
    		int newy = j + d[1];
    		if(map[i][j] != 0 && newx >= 0 && newx < r && newy >= 0 && newy < c && vis[newx][newy] == false) {//在界内且未被访问
    			vis[newx][newy] = true;
    			dfs(newx, newy, gold + map[i][j]);	
                vis[newx][newy] = false;
    		}
    	}
    	return ;
	}
}

发布了56 篇原创文章 · 获赞 4 · 访问量 1682

猜你喜欢

转载自blog.csdn.net/qq_41342326/article/details/104245001
今日推荐