[LeetCode]547. Friend Circles
题目描述
思路
dfs
对每个人未访问过的人,确定他最大的朋友圈范围,同时标记已经访问过的人,最后把所有的朋友圈结果加和即为结果
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
int findCircleNum(vector<vector<int>> & M) {
int len = M.size(), res = 0;
vector<int> visit(len, 0);
for (int i = 0; i < len; ++i)
res += getFriendNum(i, M, visit) > 0;
return res;
}
int getFriendNum(int i, vector<vector<int>> M, vector<int> & visit) {
if (visit[i]) return 0;
int friendNum = 1;
visit[i] = 1;
for (int j = 0; j < visit.size(); ++j) {
if (i != j && M[i][j]) friendNum += getFriendNum(j, M, visit);
}
return friendNum;
}
};
int main() {
Solution s;
vector<vector<int>> M = { {1,1,0}, {1,1,0}, {0,0,1} };
cout << s.findCircleNum(M) << endl;
system("pause");
return 0;
}