数据结构(十四)

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

—— 社交网络 ——

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. Powershell script for config_Win10
  2. XML Schema用法
  3. 【leetcode】1051. Height Checker
  4. Chapter09-内核模式下的线程同步之事件内核对象
  5. Mysql 日期、字符串、时间戳互转
  6. Github Actions 中 Service Container 的使用
  7. MySQL数据类型char与varchar中数字代表的究竟是字节数还是字符数?
  8. 【Flink】Flink开发中遇到的问题及解法
  9. ServletConfig对象和ServletContext对象配置初始化参数
  10. 使用scrapy-redis构建简单的分布式爬虫
  11. 129 MySQL数据类型(重要)
  12. Qt 窗口置顶 | 和取消置顶
  13. Silverlight 离线安装包
  14. Mac绿联USB转以太网无法连接解决方法
  15. 刘汝佳--WERTY
  16. html5 里面的type=”search“ ,h5版,点击手机键盘上的 ‘搜索”,”前往“等按钮,进行搜索
  17. MAC地址是怎么保证全球唯一的
  18. c语言程序设计基础程序改错,c语言程序设计改错信息.docx
  19. revit插件建模助手的【快速工具箱】功能
  20. 如何发布高德离线地图TMS服务教程

热门文章

  1. Linux RedHat7 安装oracle
  2. 计算机辅助设计实训报告范文,计算机辅助设计实习报告.doc
  3. arcgis runtime100(九、十课时)
  4. Eclipse中CVS界面功能描述(一)
  5. 数学建模日常心得笔记
  6. 65条网页制作常用技巧整理
  7. 前端面试题总汇(2019最新)
  8. 信息管理毕业设计 SSM的员工_学生宿舍后勤管理系统(源码+论文)
  9. 使用微博API(nearby timeline接口)搜集含GPS新浪微博数据
  10. JIT是什么,我的简单理解