数据结构(十四)

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

—— 社交网络 ——

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 <stdio.h>
#include <stdlib.h>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++){a[i]=i;scanf("%s",graph_1[i]);}int graph_2[N][N];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”:

其次,我们还可以发现,相对的点也是相同的状态,这就是我们说的双向连通状态,例如下图中相同颜色的位置:

我们就利用这些颜色相同的位置来建立好友链:

这样我们就能建立两条互相独立的好友链:

我们就可以根据这两条互相独立的好友链转化成数组,按题目要求的格式输出。

数据结构 图(二)社交网络相关推荐

  1. 数据结构--图(Graph)详解(二)

    数据结构–图(Graph)详解(二) 文章目录 数据结构--图(Graph)详解(二) 一.图的存储结构 1.图的顺序存储法 2.图的邻接表存储法 3.图的十字链表存储法 4.图的邻接多重表存储法 二 ...

  2. 数据结构--图(Graph)详解(四)

    数据结构–图(Graph)详解(四) 文章目录 数据结构--图(Graph)详解(四) 一.图中几个NB的算法 1.普里姆算法(Prim算法)求最小生成树 2.克鲁斯卡尔算法(Kruskal算法)求最 ...

  3. 数据结构--图(Graph)详解(三)

    数据结构–图(Graph)详解(三) 文章目录 数据结构--图(Graph)详解(三) 一.深度优先生成树和广度优先生成树 1.铺垫 2.非连通图的生成森林 3.深度优先生成森林 4.广度优先生成森林 ...

  4. 数据结构--图(Graph)详解(一)

    数据结构–图(Graph)详解(一) 文章目录 数据结构--图(Graph)详解(一) 一.图的基本概念 1.图的分类 2.弧头和弧尾 3.入度和出度 4.(V1,V2) 和 < V1,V2 & ...

  5. 一步一步手绘Spring IOC运行时序图二(基于XML的IOC容器初始化)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  6. 【数据结构(C语言)】数据结构-图

    图 文章目录 图 一.基本概念 1.图的定义 2.约定符号 3.分类 4.子图 5.路 6.其他术语 7.ADT 二.存储结构 1.邻接矩阵(数组) 2.邻接表 三.基本算法 1.遍历 2.求无向图的 ...

  7. 数据结构——图(存储结构)

    数据结构--图 图的定义和基本术语 图的类型定义 图的存储结构 数组(邻接矩阵表示法) 网(即有权图)的邻接矩阵表示法 邻接表 邻接表表示法(链式) 图的邻接表存储表示 采用邻接表表示法创建无向网 邻 ...

  8. 数据结构(二)——单链表的头插与尾插

    一.引言 上篇文章我们知道了顺序表的缺点: 插入和删除操作需要移动大量元素. 数组的大小不好确定. 存储分配需要一整段连续的存储空间,不够灵活,造成很多碎片(空闲的空间得不到利用). 所以我们就引入了 ...

  9. 数据结构--图的存储结构

    系列文章目录 第九话  数据结构之图的存储 文章目录 一.了解什么是图 二.图的定义和基本术语 三.存储结构之邻接矩阵 1.邻接矩阵的介绍 2.邻接矩阵的创建 3.主函数中实现 四.存储结构之邻接表 ...

  10. 08_Python算法+数据结构笔记-二叉搜索树查询/删除-AVL树旋转/插入/应用-贪心算法

    b站视频:路飞IT学城 清华计算机博士带你学习Python算法+数据结构_哔哩哔哩_bilibili #71 二叉搜索树:查询 import randomclass BiTreeNode:def __ ...

最新文章

  1. 损失函数的意义和作用_哈佛CASTER | 基于化学子结构表征预测药物相互作用
  2. CH451 点阵LED显示模块
  3. Python 常用Web框架的比较
  4. SAP APO 介绍
  5. 在eclipse导入SSH项目
  6. 浅析C#中foreach引用变量
  7. nssl1522-简单数数题【dp】
  8. linux 源码安装node 9,linux如何安装node?
  9. 中兴捧月比赛2020
  10. 计算机快捷截图方式,Windows系统电脑快速屏幕截图方式
  11. SpringCloud--鸿鹄Cloud分布式微服务云系统
  12. 抛弃Telemetry,用Faythe连接OpenStack和Prometheus
  13. 做外贸必备的十大网站
  14. Lesson 57 An unusual day 很不平常的一天
  15. picsart下载_PicsArt下载-PicsArt 安卓版v15.9.53-PC6安卓网
  16. QT选择目录等常用文件/文件夹操作
  17. 系统常用的通信对接方式
  18. Python-Unicode
  19. 如何写好一份产品需求文档
  20. 竞态条件的赋值_信号-sunshine225-51CTO博客

热门文章

  1. 计算机毕业设计 基于javaWeb的高校科研项目管理系统
  2. 搭建Monado Runtime和OpenXR Sample Code编译环境
  3. Yetiarnold for maya一键安装部署(二)另附yetiarnold for maya command line render
  4. 关于C++创建、写入txt文本
  5. vim 自用/.vimrc配置
  6. 如何把pdf拆分成一页一页?三个方法试试看
  7. 淘宝推流地址如何获取?抖音推流地址如何获取?技术干货(2020-12-16)
  8. VM14+CentOS7安装
  9. 在vc++6.0中配置OpenGL环境
  10. 行测必考知识点——数学运算与资料分析