用一个数组标记每个人是否在目前形成的所有圈内。
dfs挨个搜出每个人进来时是否在之前形成的圈内,在的话总圈数不变,不在的话总圈数+1,然后相应维护更新所有圈的情况。
class Solution {
public:
int dfs(int i, vector<vector<int>>& M, vector<bool>& v) {
if (v[i] == true) return 0;
int res = 1;
v[i] = true;
for (int j=0;j<v.size();++j) {
if (i!=j && M[i][j]) {
res += dfs(j, M, v);
}
}
return res;
}
int findCircleNum(vector<vector<int>>& M) {
int m = M.size();
if (m<=0) return 0;
vector<bool> v(m, false);
int res = 0;
for (int i=0;i<m;++i) {
res += dfs(i, M, v)>0;
}
return res;
}
};