您的位置:首页 > 财经 > 产业 > leetcode2101. 引爆最多的炸弹

leetcode2101. 引爆最多的炸弹

2024/12/23 6:22:31 来源:https://blog.csdn.net/qq_40016005/article/details/140606812  浏览:    关键词:leetcode2101. 引爆最多的炸弹


官解

class Solution:def maximumDetonation(self, bombs: List[List[int]]) -> int:n = len(bombs)  # 炸弹的数量# 判断炸弹 u 能否引爆炸弹 vdef isConnected(u: int, v: int) -> bool:dx = bombs[u][0] - bombs[v][0]dy = bombs[u][1] - bombs[v][1]return bombs[u][2] ** 2 >= dx ** 2 + dy ** 2# 维护引爆关系有向图edges = defaultdict(list)for i in range(n):for j in range(n):if i != j and isConnected(i, j):edges[i].append(j)res = 0  # 最多引爆数量for i in range(n):# 遍历每个炸弹,广度优先搜索计算该炸弹可引爆的数量,并维护最大值visited = [False] * n  # 记录每个炸弹是否被引爆cnt = 1  # 当前炸弹能够引爆的数量q = deque([i])visited[i] = Truewhile q:cidx = q.popleft()for nidx in edges[cidx]:if visited[nidx]:continuecnt += 1q.append(nidx)visited[nidx] = Trueres = max(res, cnt)  # 更新最大引爆数量return res  # 返回最终结果

chatgpt

这段代码实现了一个名为 maximumDetonation 的方法,用于计算给定炸弹数组中,最多能够引爆的炸弹数量。该方法使用广度优先搜索(BFS)来遍历炸弹的引爆关系图,找出从每个炸弹出发能够引爆的最大炸弹数量。

代码分解与解释

变量和数据结构
  • bombs: List[List[int]]:炸弹的列表,每个炸弹由其位置坐标和引爆半径 [x, y, r] 表示。
  • n = len(bombs):炸弹的数量。
  • edges = defaultdict(list):引爆关系有向图,edges[i] 表示能够被炸弹 i 引爆的炸弹列表。
  • res = 0:用于存储最终结果,即最多能够引爆的炸弹数量。
函数 isConnected(u: int, v: int) -> bool

该函数用于判断炸弹 u 能否引爆炸弹 v,如果炸弹 v 在炸弹 u 的引爆半径范围内,则返回 True,否则返回 False

建立引爆关系有向图

遍历每对炸弹 ij,如果 i 能引爆 j,则在 edges 中添加相应的边。

广度优先搜索(BFS)

对于每个炸弹 i,使用 BFS 计算从该炸弹出发能够引爆的炸弹数量,并更新最大值 res

代码的关键点

  • 使用 isConnected 函数判断炸弹的引爆关系。
  • 使用 edges 维护引爆关系有向图。
  • 使用 BFS 遍历每个炸弹的引爆关系,计算能够引爆的最大炸弹数量。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com