并查集
并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。
常涉及两个基本操作:

(1)合并两个不相交的集合
(2)判断两个元素是否属于同一个集合。

将N个不同元素分成一组不想交的集合。开始时,每个元素就是一个集合,然后按照规律将两个集合进行合并。

通过上述分析不难发现:
确定一共有几个集合?
观察有几个下标的值小于0,就有几个集合。
判断两个数据在不在同一个集合里面?
分别找出两个数据的根,如果是同一个根就是在一个集合里面。

学了并查集,那么它到底有什么应用呢?下面来看一个例题:
假如已知有n个人和m对好友关系(存于数字r),如果两个人是直接或间接的好友(好友的好友的好友),则认为他们同属于一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
例如:n=5,m=3,r={{1,2},{2.3},{4,5}},表示有5个人,1和2是好友,2和3是好友,4和5是好友,则1,2,3属于一个朋友圈,4,5属于另一个朋友圈,结果为2个朋友圈。
代码实现:

#include<iostream>
using namespace std;
#include<vector>
class UnionFindSet
{
public:UnionFindSet(int n){_a.resize(n,-1);//开空间并初始化}void Union(int x1,int x2)//合并两个集合{int root1 = FindRoot(x1);int root2 = FindRoot(x2);if(root1 != root2){_a[root1] += _a[root2];_a[root2] = root1;}}int FindRoot(int x){int root = x;while(_a[root] >= 0){root = _a[root];}return root;}int GetSet(){int n = 0;for(size_t i = 0;i < _a.size();++i){if(_a[i] < 0){++n;}}return n;}
protected:vector<int> _a;
};
int friends(int n,int m,int* r)
{UnionFindSet ufs(6);for(int i = 0;i < m;++i){ufs.Union(r[i*2],r[i*2+1]);//将二维数组当做一维数组来用}return ufs.GetSet()-1;//下标0没有用
}
int main()
{int n = 5;int m = 3;int r[3][2] = {{1,2},{2,3},{4,5}};cout<<friends(n,m,(int *)r)<<endl;
}

图是一种非线性结构,由顶点集合及顶点间的关系集合组成的一种数据结构。

相关概念:
完全图:在由n个顶点组成的无向图中,若有N(N-1)/2条边,则称为无向完全图。
v权重:可以表示从一个顶点到另一个顶点的距离。
临接顶点:如果(u,v)是图中的一条边,则u和v互为临接顶点。
度:一个顶点具有相邻边的个数。
路径:图中的一个顶点A,通过其它顶点到达一个顶点B后,这中间经过的顶点称为A顶点到B顶点之间的路径。
连通图:在无向图中,当一个顶点A可以通过其它顶点到达顶点B时,AB两个顶点就互为连通,如果一个图中所有顶点都是连通的,那么称该无向图为连通图。
在有向图中,若每一对顶点都存在路径,则称此图为强连通图。
生成树:一个无向连通图的生成树是它的极小连通子图,若图中有N-1个顶点,那么该图的生成树中有N-1个顶点。
两种存储方式:
(1)

(2)

数据结构:并查集和图相关推荐

  1. 最小生成树总结(prim、并查集和kruskal) C++实现

    <span style="font-family: 微软雅黑; widows: auto; background-color: inherit;">摘要:</sp ...

  2. 特征图注意力_从数据结构到算法:图网络方法初探

    作者 | 朱梓豪 来源 | 机器之心 原文 | 从数据结构到算法:图网络方法初探 如果说 2019 年机器学习领域什么方向最火,那么必然有图神经网络的一席之地.其实早在很多年前,图神经网络就以图嵌入. ...

  3. (转载)一种简单而有趣的数据结构——并查集

    一种简单而有趣的数据结构--并查集 作者:goal00001111(高粱) 一个秘密生物武器落到某地区,导致当地村民丧失部分记忆,只认得自己最熟悉的人,而忘记自己是哪个村子的人了.大家汇集到一个广场, ...

  4. 一种简单而有趣的数据结构——并查集

    一种简单而有趣的数据结构--并查集 作者:goal00001111(高粱) 一个秘密生物武器落到某地区,导致当地村民丧失部分记忆,只认得自己最熟悉的人,而忘记自己是哪个村子的人了.大家汇集到一个广场, ...

  5. 数据结构与算法--符号图

    数据结构与算法--符号图 为了计算简单,传统的图中,都是使用整数来表示顶点,这样难免会有点抽象,不能直接反映各个顶点代表的信息.在实际生活中,使用图时一般会建立一个一一对应的关系表,如下 顶点 0 1 ...

  6. python函数结构图_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  7. python define graph_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  8. 高级数据结构---并查集

    高级数据结构-并查集 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 100 int father ...

  9. python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

最新文章

  1. STM32普通定时器(TIM2-7)的时钟源
  2. linux命令grpck,不可不知的的grpck命令【每日一个知识点第184期-Linux】
  3. 一分钟学会看k线图_看K线图:阴跌如钝刀
  4. 如何理解JavaScript多个连续箭头函数书写方式
  5. J2EE开发技术点4:ajax技术
  6. python合并excel工作簿_Python合并多个Excel工作簿
  7. android studio打包纯H5项目(集成5+SDK)
  8. 【vue2.0进阶篇】用transition组件轻松实现过渡效果
  9. 基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的大学体育健康管理系统
  10. mesh threejs 属性_ThreeJS拖动案例解析
  11. Spring(十九)之异常处理
  12. 卸载vuecli3_112、vue-cli3安装遇到的问题,卸载不掉旧版本,导致更新不了
  13. RabbitMQ 学习开发笔记
  14. 有哪些不讲武德的国外计算机学习资源?
  15. Python + Opencv 实现遥感影像tif格式转jpg
  16. 个人博客页面的简单实现
  17. Cookie的应用---十天免登陆设计
  18. 计算机网络术语中rt是什么意思?今天就来给你解答
  19. 2021上岸东南大学网络空间安全学院916学硕心得分享——初试篇
  20. ubuntu基本配置学习(1)

热门文章

  1. 图片旋转90度解决办法
  2. 计算机网络:路由器和路由选择协议
  3. Android 查询设备信息c/c++常用方法
  4. 本地搭建SIP服务器
  5. 第二届童装品牌团2015年春夏联展
  6. 微信小程序|做一个底部评论视图
  7. 面试上海启明星辰+渗透测试工程师! 通过
  8. android ntfs u盘,NTFS让U盘短命?想多了
  9. java获取当天开始,结束时间
  10. debian mysql 日志_Apache2:使用mod_log_sql(Debian Etch)记录到MySQL数据库