图的表示方法
来源:互联网 发布:百万公众网络测试平台 编辑:程序博客网 时间:2024/06/09 19:58
图,是信息学竞赛中一项相当复杂又重要的内容,别具特色。图有许多表示方法,下面来逐一介绍。
【邻接矩阵】
邻接矩阵是一种最简单的表示方法,如果有一条边(u,v),权值为d,则Graph[u][v]=d。也就是说,对于有向边,Graph[入点][出点]=权值,而无向边则可以拆成两条有向边。
【前向星】
其实就是将所有的边存储下来,并排序。比如说有一个结构体,存储着一条边的u,v,d,也就是入点、出点、权值,接着开一个数组就可以了,一般来说需要排序。
【*特殊表示法:树*】
因为树是一种线性结构,所以有父亲表示法、孩子表示法、兄弟表示法等,各有特点。父亲表示法就是存储自己的父亲,孩子表示法就是存储所有自己的孩子(可以放在数组里),兄弟表示法一般和孩子表示法相配合,就是存储自己的所有兄弟,但是也可以是单个兄弟,通过类似于链表的方式找到全部的兄弟。
树的表示方法还有一种递归定义的结构,比如说这样的一个树:
就可以用1(2(3(),4(),5(6())),7(),8(9(),10()))来表示。二叉树的表示方法更为特殊,记一下两棵子树left和right就可以了。
【邻接表】
”邻接表是最好的图的表示方法“,至少在我的看法而言是对的。邻接表不仅速度快,而且占用的空间较小,乃是图论之必备数据结构。
简单来说,邻接表就是一种哈希表。假如这个哈希表的放入位置取决于入点,而实际的值取决于出点。就像下面的这样:
也就是说,是这样的:
其中list<int>[u]存的是当前的u点的所有到达的点的编号。这样的话显然空间的占用也并不大,某一条边(u,v)可以这样存:Graph[u].push_back(v)。(虽说我忘记list有没有push_back了)或者说手写一个也可以,添加在头。这样的空间复杂度和边数大致相同。list<int> Graph[MAXN];
0 0
- 图的表示方法
- 图的表示方法
- 图的数组表示方法
- 图的邻接表的表示方法
- 图和图的表示方法
- 图算法基础:图的表示方法
- UML活动图信号的表示方法
- 图的表示方法 c++ 实现
- 数据结构中图的邻接矩阵表示方法
- 数据结构基础6.1:图的表示方法
- UITableView表示图的概念和方法
- 图的表示方法C++实现
- 图的表示方法和C++实现
- 图的邻接矩阵表示方法以及遍历
- 图的几种表示方法
- 图的三种表示方法
- 学习笔记26-图的表示方法
- ACSII的表示方法
- 有关大数的运算(2)
- NOIP2015题目简单分析
- 关闭Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用 .
- NOIP 2015提高组 题解+分析
- 基础数据结构 - 链表
- 图的表示方法
- LCA实现的三种不同的方法
- NOIP2015 TG D1T2 message
- NOIP2015 PJ 4 salesman
- NOIP2015 TG D2T1 stone
- 无向树的直径(最长的两点间最短距离)
- 拓扑排序
- 最小生成树
- 树形DP的一些优化