本题本质是无向图连通分量计数。将每枚地震雷看作图中的节点,isChainExplosion[i][j] = 1 表示节点 i 与节点 j 之间存在无向边(互相引爆关系)。雷区数量即为图中连通分量的个数。
核心算法——DFS 搜索:
visited 数组标记节点是否已被访问。visited[i] 为 false,说明发现了一个新的雷区,连通分量计数加一。在一款游戏中设计炸弹人技能效果是预埋地雷,当敌人从地雷上走过时会触发地雷爆炸造成伤害。
当一个地雷被引爆时,在一定距离内的相邻的地雷也会引爆,这些能够同时引爆的枚收地雷雷形成一个雷区。一个雷区可以由一枚孤立的地雷组成,也可以有一片有连锁爆炸反应的多枚地雷组成。
现给出一组炸弹人地雷连锁爆炸关联数据,请计算有效雷区数量。
地雷连锁爆炸关系数组 isChainExplosion:地雷连锁爆炸信息被记录在一个 n×n 的二维数组 isChainExplosion 中:
isChainExplosion[i][j] = 1 表示第 i 枚地雷和第 j 枚地雷有互相引爆关系isChainExplosion[i][j] = 0 表示第 i 枚地雷和第 j 枚地雷不会被彼此还有引爆输入用例保证:
isChainExplosion[i][i] 和 isChainExplosion[j][j] 的值同时为 0 或者同时为 1有效雷区数量。
输入
[[1,0],[0,1]]
输出
2
说明
两枚地雷互相独立,其中一枚被引爆时不会触发另一枚地雷,所以雷区数量是 2
输入
[[1,0,0],[0,1,1],[0,1,1]]
输出
2
说明
一枚三枚地雷,第一枚和第二、第三枚互相独立,第二枚和第三枚临近且引爆,因此雷区数量是 2
输入
[[1,1,1],[1,1,1],[1,1,1]]
输出
1
说明
全连通场景,三枚地雷两两直接互相引爆,形成一个雷区
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册