547. 省 份 的 数 量 \huge{547.省份的数量} 547.省份的数量
原题目
标签
深度优先搜索、递归、访问状态标识
带有注解的代码
class Solution {
public:
int findCircleNum(vector<vector<int>>& isConnected) {
int n = isConnected.size();
int count = 0;
vector<bool> visited(n,false); //判断一个城市是否已经被遍历过了
for(int i = 0 ; i < n ; i++) //逐个遍历每一个城市
{
if(!visited[i]) //如果当前城市没有遍历过
{
dfs(isConnected,i,visited);
count++; //当前节点的递归完成后,确定好了一个省份了
}
}
return count;
}
void dfs(vector<vector<int>>& isConnected,int i,vector<bool>& visited)
{
visited[i] = true; //将当前访问的节点状态改变
for(int k = 0 ; k < isConnected[0].size() ; k++)
{
//两个城市是相连的并且另外一边城市没有访问过
if(isConnected[i][k] == 1 && !visited[k])
{
dfs(isConnected,k,visited); //递归访问另外一边城市
}
}
}
};