1. 程式人生 > 其它 >【leetcode】547. 省份數量(number-of-provinces)(圖論)[中等]

【leetcode】547. 省份數量(number-of-provinces)(圖論)[中等]

技術標籤:leetcodeBFS題解leetcodebfs

連結

https://leetcode-cn.com/problems/number-of-provinces/

耗時

解題:24 min
題解:9 min

題意

有 n 個城市,其中一些彼此相連,另一些沒有相連。如果城市 a 與城市 b 直接相連,且城市 b 與城市 c 直接相連,那麼城市 a 與城市 c 間接相連。

省份 是一組直接或間接相連的城市,組內不含其他沒有相連的城市。

給你一個 n x n 的矩陣 isConnected ,其中 isConnected[i][j] = 1 表示第 i 個城市和第 j 個城市直接相連,而 isConnected[i][j] = 0 表示二者不直接相連。

返回矩陣中 省份 的數量。

思路

求圖中連通塊的數量,遍歷每個點,從這個點開始bfs,並標記經過的點,計數遍歷時沒訪問過的點的數量。

時間複雜度: O ( n ) O(n) O(n)

AC程式碼

class Solution {
public:
    int findCircleNum(vector<vector<int>>& isConnected) {
        int n = isConnected.size();
        vector<bool> vis(n, false);
        int ans = 0;
        for
(int i = 0; i < n; ++i) { if(vis[i]) continue; vis[i] = true; ans++; queue<int> q; q.push(i); while(!q.empty()) { int now = q.front(); q.pop(); for(int j = 0; j < n; ++j)
{ if(isConnected[now][j]) { if(vis[j]) continue; vis[j] = true; q.push(j); } } } } return ans; } };