323. 無向圖中連通分量的數目
阿新 • • 發佈:2022-04-01
323. 無向圖中連通分量的數目
你有一個包含n
個節點的圖。給定一個整數 n
和一個數組 edges
,其中 edges[i] = [ai, bi]
表示圖中 ai
和 bi
之間有一條邊。
返回 圖中已連線分量的數目 。
示例 1:
輸入:n = 5
,edges = [[0, 1], [1, 2], [3, 4]]
輸出: 2
示例 2:
輸入:n = 5,
edges = [[0,1], [1,2], [2,3], [3,4]]
輸出: 1
提示:
1 <= n <= 2000
1 <= edges.length <= 5000
edges[i].length == 2
0 <= ai <= bi < n
ai != bi
-
edges
中不會出現重複的邊
1 class Solution { 2 public: 3 unordered_map<int, vector<int>> hashMap; // key->節點值,value->與該節點連通節點列表 4 int countComponents(int n, vector<vector<int>>& edges) { 5 // 1、構建無向連通圖 6 for (auto &vec : edges) {7 hashMap[vec[0]].push_back(vec[1]); 8 hashMap[vec[1]].push_back(vec[0]); 9 } 10 // 2、設定訪問標記 11 vector<bool> visited(n, false); 12 // 3、廣度優先搜尋找到連通路徑數 13 int count = 0; 14 queue<int> q; 15 for (int i = 0; i < n; i++) {16 if (visited[i]) { 17 continue; 18 } 19 q.push(i); 20 visited[i] = true; 21 count++; 22 while (!q.empty()) { 23 int tmp = q.front(); 24 q.pop(); 25 // 找到與tmp連通且未被訪問過的節點入隊 26 for (auto val : hashMap[tmp]) { 27 if (!visited[val]) { 28 q.push(val); 29 visited[val] = true; 30 } 31 } 32 } 33 } 34 return count; 35 } 36 };