华为OD机考 - 寻找最大价值矿堆

文章介绍了使用深度优先搜索(DFS)解决矿堆价值问题的算法,通过递归遍历地图,计算金矿和银矿组成的矿堆的最大价值。
摘要由CSDN通过智能技术生成

给你一个由 '0' (空地)、'1' (银矿)、'2'(金矿) 组成的的地图,矿堆只能由上下左右相邻的金矿或银矿连接形成。超出地图范围可以认为是空地。 假设银矿价值1,金矿价值2 ,请你找出地图中最大价值的矿堆并输出该矿堆的价值。

解题思路:

dfs函数用于进行深度优先搜索,通过递归实现。find_max_value函数则在整个地图上遍历,并找出最大价值的矿堆。对于每个非空地点,调用dfs函数进行搜索,并更新最大价值。

def dfs(grid, i, j):
    if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]):
        return 0
    if grid[i][j] == '0':
        return 0
    value = int(grid[i][j])
    grid[i][j] = '0'  # 标记当前位置为已访问
    total_value = value
    total_value += dfs(grid, i+1, j)  # 向下搜索
    total_value += dfs(grid, i-1, j)  # 向上搜索
    total_value += dfs(grid, i, j+1)  # 向右搜索
    total_value += dfs(grid, i, j-1)  # 向左搜索
    return total_value

def find_max_value(grid):
    max_value = 0
    for i in range(len(grid)):
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值