题目 省份数量
有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。
省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。
给你一个 n x n
的矩阵 isConnected
,其中 isConnected[i][j] = 1
表示第 i
个城市和第 j
个城市直接相连,而 isConnected[i][j] = 0
表示二者不直接相连。
返回矩阵中 省份 的数量。
题解 DFS
框架:
设置一个isvis容器来记录结点是否被访问即可,代码还是比较清晰明了。
附代码:
class Solution {
public:
void dfs(vector<vector<int>>& isConnected, vector<int>& isvis, int num){
for(int i = 0; i < isConnected.size(); ++i){
if(i == num)
continue;
if(!isvis[i] && isConnected[num][i] == 1){
isvis[i] = 1;
dfs(isConnected, isvis, i);
}
}
}
int findCircleNum(vector<vector<int>>& isConnected) {
int row = isConnected.size();
vector<int> isvis(row, 0);
int ans = 0;
for(int i = 0; i < row; ++i){
if(!isvis[i]){
dfs(isConnected, isvis, i);
++ans;
}
}
return ans;
}
};
不要固化思维,上来就:
for(int i = 0; i < row; ++i){
for(int j = 0; j < col; ++j){
//do someting
}
}
学会灵活思考!