方法一:染色法

类似于岛屿的个数也可以用染色法:通过深度优先搜索来做

使用一个数组来表示当前朋友a是否已经包含到已经遍历的朋友圈中,遍历所有的朋友,如果当前朋友没有在已经访问的朋友圈中,即visited==false,那么cnt++;并将该朋友所有相关的朋友使用dfs全部标记为visited=true;

当遍历完成时,cnt即为结果;并且不改变原数组,时间复杂度O(n^2),即遍历M的每个元素;空间复杂度为O(n);

C++代码:

class Solution {
public:
int findCircleNum(vector<vector<int>>& M) {
int m=M.size();
if(m==) return ;
int cnt=;
vector<bool>visited(m,false);
for(int i=;i<m;i++){
if(!visited[i]){
dfs(M,visited,i);
cnt++;
}
}
return cnt;
}
void dfs(vector<vector<int>>&M,vector<bool>&visited,int i){
int m=M.size();
for(int j=;j<m;j++){
if(M[i][j]== && !visited[j]){
visited[j]=true;
dfs(M,visited,j);
}
}
}
};

方法二:并查集

//使用并查集,基本思想是假设所有人都独立,初始化朋友圈为n个,如果两个人相关那么n--,将所有人遍历可得到朋友圈个数;
class Solution {
public:
int findCircleNum(vector<vector<int>>& M) {
int n=M.size();
if(n==) return ;
int groups=n;
vector<int>leads(n,);
for(int i=;i<n;i++) leads[i]=i;
for(int i=;i<n;i++){
for(int j=i+;j<n;j++){
if(M[i][j]==){
int lead1=find(i,leads);
int lead2=find(j,leads);
if(lead1!=lead2){
groups--;leads[lead1]=lead2;
}
}
}
}
return groups;
}
private:
int find(int x,vector<int>&parents){
if(x==parents[x])
return x;
else
return find(parents[x],parents);
}
};

最新文章

  1. Android权限管理之Android 6.0运行时权限及解决办法
  2. 删除 Windows 旧 OS 加载器
  3. Memcache之内存分配机制
  4. [原]Jenkins(一)---我理解的jenkins是这样的
  5. HTML的超链接
  6. 【转】CSS white-space 属性
  7. UVa 10294 (P&#243;lya计数) Arif in Dhaka (First Love Part 2)
  8. gentoo
  9. POJ 3017 单调队列dp
  10. HttpGet和HttpPost的区别
  11. PHP基础入门详解(一)【世界上最好用的编程语言】
  12. vue中简单的小插曲
  13. 0011 删除链表的倒数第N个节点
  14. BeanUtils.copyProperties(A,B)使用注意事项
  15. python 生成器按指定大小读取文件
  16. PCL(Point Cloud Library)的第三方库简单介绍(boost,eigen,flann,vtk,qhull)
  17. 解决Linux SSH登录慢
  18. OpenStack入门篇(八)之镜像服务Glance
  19. Linux下TC使用说明 &amp; 使用备注 ZZ
  20. jeecg3.7中弹出窗操作标签dgOpenOpt的用法

热门文章

  1. ChinaCock扫描控件介绍-使用TCCBarcodeScanner引起app闪退
  2. sql 存储过程笔记2
  3. linux获取保留yum源、并获取安装位置
  4. deep_learning_Function_ lambda函数详解
  5. Linux根文件系统和目录结构及bash特性2
  6. API开发之接口安全(一)----生成sign
  7. 调用libusb_control_transfer 出错,返回-8
  8. Python: 多进程的分布式进程multiprocessing.managers
  9. 如何使用Laravel Debugbar?
  10. 【杂题】cf1041fF. Ray in the tube