黄金矿工(LeetCode Medium难度)1129题 题解(DFS)
2024-10-16 10:43:01
题目描述:
给定一个二维网络,给定任意起点与终点。每一步可以往4个方向走。要找出黄金最多的一条线路。
很明显的是要“一条路走到黑,一直下去直到某个条件停止”。
运用dfs(深度优先搜索)求解。
因为起点任意,所以从每个点开始搜,接着每个点又搜相邻点。反复如此。
递归的终止条件:
1:越界。
2:搜到已经走过的点也终止。
3:遇到黄金数量为0的点。
用一个形参变量sum存储每条线路的当前黄金数量。
每一次更新返回值res的值。
搜一个点先将其标记,再搜其4个方向相邻点,搜完相邻点后取消原标记。
解题代码:
class Solution {
public int res = -10000000;
public int max = 0 ;
public boolean[][] vis = new boolean[20][20];
public int getMaximumGold(int[][] grid) {
for(int i = 0 ; i < grid.length;i++){
for(int j = 0 ;j < grid[0].length;j++){
dfs(grid,i,j,0);
}
}
return res;
}
public void dfs(int[][] grid,int i,int j,int sum){ if(i<0||j<0||i>=grid.length||j>=grid[0].length||grid[i][j] == 0 || vis[i][j] ){ // 递归终止条件
return ;
}
vis[i][j] = true; // 标记
sum += grid[i][j]; // 更新返回值
res = Math.max(sum,res);
dfs(grid,i-1,j,sum);
dfs(grid,i,j-1,sum);
dfs(grid,i+1,j,sum);
dfs(grid,i,j+1,sum);
vis[i][j] = false; // 取消标记 }
}
最新文章
- chadang saidui
- 输入m乘法表
- 【C#】在窗体中水平居中的控件,到了XP下不居中的解决办法
- HEAP CORRUPTION 错误
- Spring第一天
- Kali Linux 2016.2发布提供虚拟机以及系统镜像下载
- 161109、windows下查看端口占用情况
- javascript 倒计时获取验证码
- Win7 64位安装MySQL
- React + Node 单页应用「一」前端搭建
- 关于ASP.NET MVC的js和css资源管理
- 简单介绍python的双向队列
- MySQL实战45讲学习笔记:事务隔离级别(第三讲)
- centos7 安装oracle11g
- Fluent动网格【1】:概述
- Swift与JS的交互
- 3D开机动画
- activiti复盘重推的一种简单实现方式:
- ios开发之--tableview单选/多选实现(非tableview的editing状态)及默认选中
- WinForm中从SQLite数据库获取数据显示到DataGridView