数据结构八----图
图的定义:非空顶点集合和边的集合
g=(v,e)
1.图的相关术语
·无向图
·有向图<v3,v4,v1>
·顶点,边(无向图中)弧(有向图)弧的没有箭头的一端为弧尾,有箭头的一端为弧头
·无向完全图:任意两个顶点都有边,n个顶点的图有n(n-1)/2条边
·有向完全图:任意两个顶点之间都有方向互为相反的两条弧相连接,n个顶点,n(n-1)条边
·稠密图:一个图接近完全图
·稀疏图:边数很少的图
·顶点的度:依附于某顶点的边数(TD)、td=id+od
·入度:(有向图):以顶点为终点的弧的数目(ID)
·出度:(有向图):以顶点为始点的弧的数目(OD)
·对于有n个顶点,e条边的图 2e=(td的和)/2
·边的权:与边有关的数据信息称为权(权值通常为数字)
·网图:边上带权的图为网图或者网络(有向网络或无向网络)
·路径:两个顶点之间的路径为vp->v1->v2>v4
·上面的路径长度为3
·回路:称vi的路径为回路或者环、
·简单路径:序列中顶点不重复出现的路径
·简单回路:除第一个顶点与最后一个顶点外,其他顶点不重复出现的回路
·子图:顶点和边或者弧都是另外一个图的子集
·连通:(无向图)如果从一个顶点到另一个顶点有路径,则为连通
·连通图:图中任意两点都是连通的,则为连通图
·连通分量:无向图的极大连通子图
(包含和子图顶点有关所有的边,那就是极大连通子图;如果包含了必不可少的边,且少到不可再少还是连通,那就是极小连通子图。)
(有向图)
· 强连通图:任意一对顶点都有从其到其的方向(双向),则为强连通图
· 强连通分量:有向图的极大强连通子量为强连通分量
·生成树:连通图中的一个极小连通子图,包含全部n个顶点,切包含n-1个边
·生成森林:在非连通图中,由每个连通分量都能得到一个极小连通子图,即一颗生成树,这些连通分量的生成树就组成了一个非连通图的生成森林。
图的存储表示
邻接矩阵
1.存储方式
- 存储普通图:矩阵元素为1和0
- 存储网图:矩阵元素为权值和∞
2.存储特点 - 无向图的邻接矩阵一定为对称矩阵,因此只需要存放上(下)三角即可。
- 对于无向图,第i行的非零的个数正好是第i个顶点的度
- 有向图,则是该顶点的出度(或入度)。
- 用邻接矩阵可以很容易确定两个顶点之间是否有边相连,却要确定由多少边是个很费时间的事情。
缺点:邻接矩阵的存储方式对于边数远远小于顶点数的图,在空间上是极大的浪费!对于稀疏图,即边数远远小于顶点数,采用邻接表
邻接表
参考资料:https://blog.youkuaiyun.com/weixin_37853880/article/details/80320765(参考资料下的http总结也不错) - 对于无向图:为邻接表
- 对于有向图:有邻接表和逆邻接表
但是邻接表无法从一个图上看出一个有向图的入度和出度。
十字链表
画法参考资料:
https://www.cnblogs.com/zyl905487045/p/7815429.html
邻接多重表
主要针对无向图,因为无向图的邻接图每个顶点都有关系
图的遍历
深度优先搜索:
广度优先搜索