社交网络 (并查集的应用)
来源:互联网 发布:集团公司网络规划 编辑:程序博客网 时间:2024/06/04 17:53
很简单的并查集基础应用,相当于连通图的问题,将可连接的节点归并到同一个节点下即可.直接上代码.
描述
随着社交平台的兴起,人们之间的沟通变得越来越密切。通过Facebook的分享功能,只要你是对方的好友,你就可以转发对方的状态,并且你的名字将出现在“转发链”上。经过若干次转发以后,很可能A分享了一条好友C的状态,而C的这条状态实际上是分享B的,但A与B可能并不是好友,即A通过C间接分享了B的状态。
给定你N个人之间的好友关系,好友关系一定是双向的。只要两个人是好友,他们就可以互相转发对方的状态,无论这条状态是他自己的,还是他转发了其他人的。现在请你统计,对于每两个人,他们是否有可能间接转发对方的状态。
输入
第一行1个整数N(1<=N<=300)。
接下来N行每行N个整数,表示一个N*N的01矩阵,若矩阵的第i行第j列是1,表示这两个人是好友,0则表示不是好友。
保证矩阵的主对角线上都是1,并且矩阵关于主对角线对称。
输出
一个N*N的01矩阵,若矩阵的第i行第j列是1,表示这两个人可能间接转发对方的状态,0则表示不可能。
#include <iostream>#include <stdio.h>using namespace std;char str[310][310];int n, b[310][310], father[310];int find(int x)//返回祖先节点{ if(x == father[x]) return father[x]; father[x] = find(father[x]); return father[x];}void Union(int x,int y){ int fx = find(x); int fy = find(y); if(fx != fy) { father[fx] = fy; }}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) father[i] = i; for(int i=1;i<=n;i++) { cin>>str[i]; for(int j=1;j<=n;j++) { if(str[i][j-1] == '1') Union(i,j);//归并 } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) if(find(i) == find(j)) b[i][j] = 1; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { printf("%d",b[i][j]); } printf("\n"); } return 0;}
1 0
- 社交网络 (并查集的应用)
- 并查集的应用
- 并查集的应用
- 并查集的应用
- 并查集的应用
- PATL3-003. 社交集群-并查集
- L3-003. 社交集群----并查集
- 并查集--hdu1272(并查集的应用)
- 并查集应用
- 并查集应用
- 并查集应用
- PTA-社交网络图中结点的“重要性”计算(并查集+bfs)
- L3-003. 社交集群-图的连通分支数&&并查集-天梯赛练习题
- PKU_1988 并查集的应用
- 并查集的高级应用POJ_1984
- 并查集的应用:食物链
- POJ1182并查集的应用
- 并查集的应用hdu1598
- J2EE的组成。
- 欢迎使用CSDN-markdown编辑器
- 10.字符设备驱动模型(2)-字符设备驱动模型
- opencv最小包络三角形
- TensorFlow基本用法
- 社交网络 (并查集的应用)
- 促销活动 (优先队列的应用)
- 如何运用归并排序快速求得逆序对数目
- GitHub的一个日志打印库LazyLogger
- Android经典面试题
- bootstrap 图标glyphicons图标符号不正常显示解决办法
- PROJEC LOG 2- VISUALIZATION
- javascript数组和字符串的常见用法
- indexOf()在字符串进行检索