题目:
题解:
代码如下:
class Solution{
public:
// 题目给的是邻接矩阵,然后判断邻接矩阵中的连通块的个数
bool visited[210];
int n,cnt;
int findCircleNum(vector<vector<int>>& g) {
memset(visited,0,sizeof visited);
n=g.size(),cnt=0;
// 从顶点i开始寻找连通量
for(int i=0;i<n;++i){
if(!visited[i]){
bfs(g,i);
cnt++;
}
}
return cnt;
}
void bfs(vector<vector<int>>&g,int i){
queue<int> q;
q.push(i),visited[i]=true;
while(q.size()){
int j=q.front();q.pop();
// 访问j的所有邻接点
for(int k=0;k<n;++k){
// j-k之间有边且k点未被访问,则加入k点
if(j!=k&&g[j][k]&&!visited[k]){
visited[k]=true;
q.push(k);
}
}
}
}
void dfs(vector<vector<int>>& g,int i){
// 遍历 i 的所有邻接点
for(int j=0;j<n;++j){
if(i!=j&&g[i][j]&&!visited[j]){
visited[j]=true;
dfs(g,j);
}
}
}
};