日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 2101. 引爆最多的炸弹(图的遍历)

發布時間:2024/7/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 2101. 引爆最多的炸弹(图的遍历) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給你一個炸彈列表。一個炸彈的 爆炸范圍 定義為以炸彈為圓心的一個圓。

炸彈用一個下標從 0 開始的二維整數數組 bombs 表示,其中 bombs[i] = [xi, yi, ri] 。xi 和 yi 表示第 i 個炸彈的 X 和 Y 坐標,ri 表示爆炸范圍的 半徑 。

你需要選擇引爆 一個 炸彈。當這個炸彈被引爆時,所有 在它爆炸范圍內的炸彈都會被引爆,這些炸彈會進一步將它們爆炸范圍內的其他炸彈引爆。

給你數組 bombs ,請你返回在引爆 一個 炸彈的前提下,最多 能引爆的炸彈數目。

示例 1:

輸入:bombs = [[2,1,3],[6,1,4]] 輸出:2 解釋: 上圖展示了 2 個炸彈的位置和爆炸范圍。 如果我們引爆左邊的炸彈,右邊的炸彈不會被影響。 但如果我們引爆右邊的炸彈,兩個炸彈都會爆炸。 所以最多能引爆的炸彈數目是 max(1, 2) = 2

示例 2:

輸入:bombs = [[1,1,5],[10,10,5]] 輸出:1 解釋: 引爆任意一個炸彈都不會引爆另一個炸彈。所以最多能引爆的炸彈數目為 1

示例 3:

輸入:bombs = [[1,2,3],[2,3,1],[3,4,2],[4,5,3],[5,6,4]] 輸出:5 解釋: 最佳引爆炸彈為炸彈 0 ,因為: - 炸彈 0 引爆炸彈 12 。紅色圓表示炸彈 0 的爆炸范圍。 - 炸彈 2 引爆炸彈 3 。藍色圓表示炸彈 2 的爆炸范圍。 - 炸彈 3 引爆炸彈 4 。綠色圓表示炸彈 3 的爆炸范圍。 所以總共有 5 個炸彈被引爆。提示: 1 <= bombs.length <= 100 bombs[i].length == 3 1 <= xi, yi, ri <= 10^5

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/detonate-the-maximum-bombs
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 一個炸彈 x 能引爆 一個炸彈 y ,則 x 存在一條 指向 y 的有向邊,建圖
  • 依次以每個點為起點,開始 BFS 或者 DFS,計算可以遍歷的點的數目,取最大的
class Solution { public:int maximumDetonation(vector<vector<int>>& bombs) {int n = bombs.size(), x1, y1, r1, x2, y2;vector<vector<int>> g(n);for(int i = 0; i < n; ++i){x1 = bombs[i][0];y1 = bombs[i][1];r1 = bombs[i][2];for(int j = 0; j < n; ++j){if(i == j) continue;x2 = bombs[j][0];y2 = bombs[j][1];if(1LL*(x1-x2)*(x1-x2)+1LL*(y1-y2)*(y1-y2) <= 1LL*r1*r1)g[i].push_back(j);}}int ans = 1;for(int i = 0; i < n; ++i){queue<int> q;q.push(i);vector<bool> vis(n, false);vis[i] = true;int ct = 0;while(!q.empty()){int id = q.front();q.pop();ct++;for(int nid : g[id]){if(!vis[nid]){vis[nid] = true;q.push(nid);}}}ans = max(ans, ct);}return ans;} };

80 ms 20.8 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LeetCode 2101. 引爆最多的炸弹(图的遍历)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。