金矿最大黄金采集问题:回溯法详解与代码实现
题目描述
假设你拥有一座金矿,矿区被划分成大小为 m × n 的网格。每个网格单元格里包含一定数量的黄金(非负整数),用一个二维数组 grid
来表示。如果该格子为空,表示该位置的黄金数量为 0。
矿工们想要最大化采集的黄金数量,但采矿有以下限制:
- 矿工可以从任意一个含黄金的格子出发,也可以随时停止采矿。
- 每当矿工进入一个格子,就采集该格子所有的黄金。
- 矿工每次只能从当前位置向上下左右四个方向移动。
- 每个格子只能被采集(访问)一次,不能重复进入。
- 不能进入黄金数量为 0 的格子。
目标:计算矿工最多能够采集到多少黄金。
题目分析
这个问题的核心是在一个二维网格中寻找一个路径,使得路径经过的格子上的黄金数目之和最大,且路径必须满足:
- 起点可以是任意非零格子;
- 每步移动只能上下左右(四个方向);
- 路径中每个格子只能访问一次;
- 不进入含黄金为0的格子。
这类问题属于经典的网格搜索+回溯范畴,类似“岛屿计数”、“最长路径”等问题。需要对每个可能起点展开深度优先搜索(DFS),探索所有可行路径,并记录最大黄金数。
<