给一个图的邻接矩阵,求连通分量。

原题链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
public:
void dfs(vector<vector<int>>& isConnected, vector<int>& visited, int n, int i) {
// 枚举所有城市,看和 i 这个城市是否相连
for (int j = 0; j < n; j++) {
// 如果城市 j 与城市 i 相连且还没被访问过
if (isConnected[i][j] == 1 && !visited[j]) {
// 标记访问
visited[j] = 1;
// 去城市 j 进行深度搜索
dfs(isConnected, visited, n, j);
}
}
}

int findCircleNum(vector<vector<int>>& isConnected) {
int n = isConnected.size();
vector<int> visited(n);
int circles = 0;
// 枚举每个城市
for (int i = 0; i < n; i++) {
// 如果没有访问过
if (!visited[i]) {
// 深度优先搜索与这个城市相连的所有城市
dfs(isConnected, visited, n, i);
circles++;
}
}
return circles;
}
};