班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。

给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。

示例 1:

输入: 
[[1,1,0],
 [1,1,0],
 [0,0,1]]
输出: 2 
说明:已知学生0和学生1互为朋友,他们在一个朋友圈。
第2个学生自己在一个朋友圈。所以返回2。
示例 2:

输入: 
[[1,1,0],
 [1,1,1],
 [0,1,1]]
输出: 1
说明:已知学生0和学生1互为朋友,学生1和学生2互为朋友,所以学生0和学生2也是朋友,所以他们三个在一个朋友圈,返回1。
注意:

N 在[1,200]的范围内。
对于所有学生,有M[i][i] = 1。
如果有M[i][j] = 1,则有M[j][i] = 1。

简单的并查集问题

#define MAX_STUDENT 200// 记录节点的祖父节点
int g_father[MAX_STUDENT];// 并查集
// 返回祖父节点
int unionSearch(int id)
{int son;int temp;// 如果祖父节点是自己,直接返回if (g_father[id] == id) {return id;}son = id;while (g_father[id] != id) {// 直到找到祖父节点id = g_father[id];}// 压缩算法// 把这条链上的节点的祖父节点都设置为id// 使层级变成两层while (son != g_father[id]) {temp = son;son = g_father[id];g_father[temp] = id;}return id;
}int findCircleNum(int** M, int MSize, int* MColSize)
{int i;int j;int index1;int index2;int friendCircleNum = MSize;for (i = 0; i < MSize; i++) {// 先将祖父节点初始化成自己g_father[i] = i;}for (i = 0; i < MSize; i++) {for (j = 0; j < MSize; j++) {if ((i != j) && (M[i][j] == 1)) {// 寻找i、j的祖父节点index1 = unionSearch(i);index2 = unionSearch(j);// 如果他们的祖父节点不相同if (index1 != index2) {// 把他们关联起来g_father[index1] = index2;friendCircleNum--;} }}}return friendCircleNum;
}

leetcode 547. 朋友圈 C语言相关推荐

  1. 力扣 547. 朋友圈 c语言 三种解法 深搜 广搜 并查集。

    题目: 并查集: /*力扣 547 朋友圈 并查集 c语言 2020/12/14 1:04 by ksks14*/ /*初始化 查找 合并*/ #define maxsize 10000 int fl ...

  2. LeetCode 547. 朋友圈(图的遍历BFS DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 广度优先 2.2 DFS 深度优先 1. 题目 问有几个连通网络 2. 解题 2.1 BFS 广度优先 参考图的数据结构 class Solution ...

  3. 2021-07-01:并查集,200岛屿问题,547朋友圈问题

    并查集: 并查集的初始化: 自己的root先初始化为自己. 如果需要合并ab, 则把b的老大指向a 并查集优化1: 需要多创建一个数据结构rank去查看深度 将短链的root接在长链上,降低查找深度 ...

  4. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  5. 每天都刷朋友圈,那你知道并查集吗?

    微信大概是我们每天必须接触的一个APP之一,公交上.地铁上,异或工作休息时,我们都忍不住刷刷朋友圈,看看一些点赞之交的朋友当天又经历了什么.相较于QQ,微信的一个特点之一就是:除非好友的好友也是你的好 ...

  6. [LeetCode]547. Friend Circles朋友圈数量--不相邻子图问题

    /*思路就是遍历所有人,对于每一个人,寻找他的好友,找到好友后再找这个好友的好友,这样深度优先遍历下去,设置一个flag记录是否已经遍历了这个人.其实dfs真正有用的是flag这个变量,因为如果m个人 ...

  7. c语言朋友圈通信录的设计,手把手教你搞定高逼格朋友圈文案

    如何给朋友圈照片配上高逼格的文字? 最近 有网友对此课题发起了里程碑似的挑战 这里 小编将此文章分享给各位客官 读完这篇 「中国当代艺术编瞎话速成指南」 你就可以摇身一变 跻身新一代中国前卫艺术行业从 ...

  8. python语言编写一个生成九宫格图片的代码_用Python一键生成炫酷九宫格图片,火了朋友圈...

    作为一个男同胞来说,为了给女朋友拍一张美美的照片,着实需要花费很大的时间和精力,不仅仅需要从众多的图片中精心挑选,而且还需要有着超强的图片精修能力,才能得到一张张达到女友要求的图片,真心不容易啊- 朋 ...

  9. r语言list添加元素_Redis数据结构 List 类型】List 类型生产中的应用 消息队列、排行榜、朋友圈、监控程序的实现...

    点击蓝色"不太灵光的程序员"关注我哟加个"星标",每天上午 08:00,干货推送!昨天有很多同学关注,感谢你们的支持.本文依旧会对学习内容进行拆分,建议阅读时间 ...

最新文章

  1. 检查当前ORACLE连接数
  2. Transformer又出新变体∞-former:无限长期记忆,任意长度上下文
  3. CSP认证201509-3 模板生成系统[C++题解]:字符串处理、模拟、哈希表、引号里面有空格的字符串怎么读入
  4. Anywhere 随启随用的静态文件服务器
  5. USACO 3.2.3 Spin
  6. python爬虫金融数据_python爬虫项目-爬取雪球网金融数据(关注、持续更新)
  7. Matlab小波工具箱的使用2
  8. 逆向某某单车-iOS客户端
  9. c++14 0 名字空间和条件编译
  10. warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
  11. Linux 添加IPv6策略路由,26-IPv6策略路由配置
  12. 宝峰c1对讲机写频软件_宝峰对讲机写频软件(BF-480 编程软件)
  13. 十分钟接入WO+能力共享平台
  14. java 拼图_Java 9:“拼图计划终于给了我们急需的Java安全带”
  15. win10怎么打开网络计算机,Win10怎么启用网络发现?
  16. H3C交换机环路监测,NTP时间同步。
  17. 赵小楼《天道》《遥远的救世主》深度解析(72)说点人性不喜欢听的
  18. URL传参多了%7Bfid%7D字符,在我使用{id}传参时拼接了多余字符串
  19. 程序员吐槽:四年被三家公司裁员补偿,网友:去BAT转转?
  20. 2020usnews计算机排名布朗,2020usnews布朗大学排名怎么样?

热门文章

  1. 每日分享(采集网站访客流量统计程序)
  2. Bugku Misc 图穷匕见
  3. Linux 系统vim练习简单的 shell script
  4. 推荐一个windows下使用的无广告解压缩软件
  5. Error in nextTick: “TypeError: Cannot read property ‘xxx‘ of undefined“
  6. 【行为分析】(二)前端埋点实现及原理分析
  7. 风力发电会影响气候?
  8. 揭秘团队业绩不好的原因
  9. 教你cad版本怎么用转换器转换操作
  10. 【BLE】CC2541与CC2540的区别