官解

class Solution:
    def maximumDetonation(self, bombs: List[List[int]]) -> int:
        n = len(bombs)  # 炸弹的数量
        
        # 判断炸弹 u 能否引爆炸弹 v
        def 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] = True
            while q:
                cidx = q.popleft()
                for nidx in edges[cidx]:
                    if visited[nidx]:
                        continue
                    cnt += 1
                    q.append(nidx)
                    visited[nidx] = True
            res = 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 遍历每个炸弹的引爆关系,计算能够引爆的最大炸弹数量。
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐