一,图的定义
一个图就是有顶点和边构成的集合。
顶点连边的数量就是顶点的度数。
注意:线性表可以是空表,树可以是空树,但是图不能是空图 。
也就是说 ,图中不能一个顶点都没有,图的顶点V一定非空,但边即E可以为空。此时图中只有顶点没有边。
二,图的基本概念
重边:两个顶点不止一条边。
自环:自己到自己的边。
出度:一个顶点向别的顶点连边的条数
入度:别的顶点连边到一个顶点的条数
三,图的分类
根据方向:无向图,有向图
根据边长:带权图,不带权图
四,图的表示
数组(邻接矩阵)
有向图的邻接矩阵是不对称的
带权(邻接表)
表头代表图的节点数组,对应图的顶点
每个节点连接一个链表或指针数组
若a,b相连,则a对应的表头后有一个顶点b的指针
通过指针相连
通过结构体将表头,指针,边权相结合。
采用vector减少空间占用
邻接表的优点
空间复杂度O(m)
遍历某个点的相邻节点的时间复杂度O(p),p为该点的出度,即出去的条数
缺点
如果要修改查询边权,需要时间复杂度O(p),不然邻接矩阵O(1)
邻接表和邻接矩阵
邻接矩阵适用点较少,边多
邻接表适用点较多,或者可呢出现重边的情况
稀疏图和稠密图
边和顶点的数量关系
边的条数(E)<<顶点数量(V^2)稀疏图
边多稠密
五,图的遍历
1,深度优先搜索遍历
特点
优先阅读被最先发现的文章,直到找不到就图回去
需要用栈来维护阅读的层级
2,广度优先搜索遍历
特点:
优先阅读离初始文献更近的文章
需要用对列来维护阅读的文章
有向无环图(DAG)
拓扑排序