547. Friend Circles
There are N students in a class. Some of them are friends, while some are not. Their friendship is transitive in nature. For example, if A is a direct friend of B, and B is a direct friend of C, then A is an indirect friend of C. And we defined a friend circle is a group of students who are direct or indirect friends.
Given a N*N matrix M representing the friend relationship between students in the class. If M[i][j] = 1, then the ith and jth students aredirect friends with each other, otherwise not. And you have to output the total number of friend circles among all the students.
解题思路:一开始以为是求无向图中环的数量,仔细分析题意后发现原来是求连通分量个数,用DFS解决了。
class Solution {
public:
int findCircleNum(vector<vector<int>>& M) {
vector<int> isVisit(M.size());
int res = 0;
for (int i = 0; i < M.size(); ++i){
if (isVisit[i]) continue;
deep_first_search(M, i, isVisit);
res += 1;
}
return res;
}
void deep_first_search(vector<vector<int>>& M, int & i, vector<int>& isVisit){
vector<int>& node_i_out = M[i];
isVisit[i] = 1;
for (int j = 0; j < node_i_out.size(); ++j){
if (j != i && node_i_out[j] == 1 && isVisit[j] == 0)
deep_first_search(M, j, isVisit);
}
}
};
结果: