有 n
个城市,其中一些彼此相连,另一些没有相连。如果城市 a
与城市 b
直接相连,且城市 b
与城市 c
直接相连,那么城市 a
与城市 c
间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n
的矩阵 isConnected
,其中 isConnected[i][j] = 1
表示第 i
个城市和第 j
个城市直接相连,而 isConnected[i][j] = 0
表示二者不直接相连。
返回矩阵中 省
输入:isConnected = [[1,1,0],[1,1,0],[0,0,1]]
输出:2
份 的数量。
cpp
class Solution {
public:
void dfs(vector<vector<int>>& isConnected, vector<int>& visit, int len, int i){
for(int j = 0; j < len; j ++){
if(isConnected[i][j] == 1 && !visit[j]) { //如果i,j连通并且j没有被访问过
visit[j] = 1; //将j加入
dfs(isConnected, visit, len, j); //以j为原点遍历其他点
}
}
}
int findCircleNum(vector<vector<int>>& isConnected) {
int len = isConnected.size();
vector<int> visit(len);
int ans = 0;
for( int i = 0; i < len; i ++){
if(visit[i] == 0){ //从(0,0)开始往后
dfs( isConnected, visit, len, i);
ans ++;
}
}
return ans;
}
};
力扣运行要在他的环境下运行,想要运行可以自己转换一下,我用的这个方法是深度优先搜索