博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构 图(二)社交网络
阅读量:3961 次
发布时间:2019-05-24

本文共 1739 字,大约阅读时间需要 5 分钟。

数据结构(十四)

学习数据结构与算法过程中的心得体会以及知识点的整理,方便我自己查找,也希望可以和大家一起交流。

—— 社交网络 ——

1.题目描述

随着社交平台的兴起,人们之间的沟通变得越来越密切。通过Facebook的分享功能,只要你是对方的好友,你就可以转发对方的状态,并且你的名字将出现在“转发链”上。经过若干次转发以后,很可能A分享了一条好友C的状态,而C的这条状态实际上是分享B的,但A与B可能并不是好友,即A通过C间接分享了B的状态。

给定你N个人之间的好友关系,好友关系一定是双向的。只要两个人是好友,他们就可以互相转发对方的状态,无论这条状态是他自己的,还是他转发了其他人的。现在请你统计,对于每两个人,他们是否有可能间接转发对方的状态。

1.1输入

第一行1个整数N(1<=N<=300)。

接下来N行每行N个整数,表示一个N*N的01矩阵,若矩阵的第i行第j列是1,表示这两个人是好友,0则表示不是好友。
保证矩阵的主对角线上都是1,并且矩阵关于主对角线对称。

1.2输出

一个N*N的01矩阵,若矩阵的第i行第j列是1,表示这两个人可能间接转发对方的状态,0则表示不可能。

1.3样例输入与输出

样例输入

5
11000
11100
01100
00011
00011
样例输出
11100
11100
11100
00011
00011

1.4提示

在输入数据中,1与2是好友,2与3是好友,4与5是好友。 因此1、2、3有可能互相转发状态;4、5有可能互相转发状态。这两组人之间则不可能。

2.代码实现

c

#include 
#include
int a[302];int find(int x){
if(x == a[x]) return a[x]; a[x] = find(a[x]); return a[x];}int main() {
int N; scanf("%d\n", &N); char graph_1[N+1][N+1]; for(int i=0;i
< N;i++) for(int j = 0;j < N;j++) {
graph_2[i][j] = graph_1[i][j]-'0'; if(graph_2[i][j] == 1) {
if(find(i) != find(j)) a[find(i)] = find(j); } } for(int i = 0;i < N;i++) for(int j = 0;j < N;j++) if(find(i) == find(j)) graph_2[i][j] = 1; for(int i = 0;i < N;i++) for(int j = 0;j < N;j++) printf("%d",graph_2[i][j]); printf("\n"); } return 0;}

3.代码说明

本题根据题意可以知道输入的数据代表的是双向关系,例如1和2是好友,所以1发的消息2可以转发,反之亦然,这样我们的工程量就少了很多,我们只需要找到每个用户之间的好友链,那么一条链上的所有用户之间都是可以转发的。

那么首先,我们需要遍历所有用户,寻找所有的好友链,需要注意的是我们的表中对角线必须都是表示连通状态的“1”:
社交网络
其次,我们还可以发现,相对的点也是相同的状态,这就是我们说的双向连通状态,例如下图中相同颜色的位置:
社交网络
我们就利用这些颜色相同的位置来建立好友链:
社交网络
这样我们就能建立两条互相独立的好友链:
社交网络
我们就可以根据这两条互相独立的好友链转化成数组,按题目要求的格式输出。

转载地址:http://dbazi.baihongyu.com/

你可能感兴趣的文章
linux查看文件有多少行
查看>>
error:previous declartion of "XXX" is here的解决方法
查看>>
sha1的几个函数的使用
查看>>
为什么int型的数组用memset不能清零(memset的使用规范)
查看>>
<转>CRC校验、MD5、SHA1算法的概念和可靠性现状
查看>>
linux杀死进程详解
查看>>
字符串表示的IP地址与点分式表示的IP地址间的相互转化
查看>>
implicit declaration of function 这种警告问题的原因及解决方法
查看>>
utorrent如何处理占资源过大的问题
查看>>
<好文分享>妖怪和和尚过河问题
查看>>
uTP协议的前世今生(from wikipedia)
查看>>
uTP协议的前世今生(from wikipedia)
查看>>
utp的包头格式<2>
查看>>
开源搜索引擎的比较(收藏几个博客文章)最近要做搜索系统的研究方向
查看>>
asii码表
查看>>
<读书笔记>WebUsage Mining:Discovery and Applications of Usage Patterns from Web Data
查看>>
并查集(Disjoint Sets)
查看>>
在Linux下安装MATLAB
查看>>
readme
查看>>
微服务概念
查看>>