



官解

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。
建立引爆关系有向图
遍历每对炸弹 i 和 j,如果 i 能引爆 j,则在 edges 中添加相应的边。
广度优先搜索(BFS)
对于每个炸弹 i,使用 BFS 计算从该炸弹出发能够引爆的炸弹数量,并更新最大值 res。
代码的关键点
- 使用
isConnected函数判断炸弹的引爆关系。 - 使用
edges维护引爆关系有向图。 - 使用 BFS 遍历每个炸弹的引爆关系,计算能够引爆的最大炸弹数量。
