图是一种非常重要的数据结构,特别是应用在地图上,比如高德地图路径规划、坐地铁、公交时的路径规划,我们的生活与之息息相关。下面回顾一波基础定义
一、图的定义
图(Graph):是由顶点的有穷非空集合和顶点之间边的集合组成。
顶点(Vertex):图中的数据元素。
边(Edge):顶点之间的逻辑关系,表示为(ⅵ,vj)。
弧(Arc):即有向边,表示为<Vi,Vj>。
备注:图通常表示为G(V,E),其中,G 表示一个图,V 是图 G 中顶点的集合,E 是图 G 中边的集合。
二、有向图与无向图的定义
无向边:若顶点 ⅵ 到 vj之间的边没有方向,则称这条边为无向边(Edge),用无
序偶对(ⅵ,vj)来表示。无向图 (Undirected graphs):图中任意两个顶点之间的边都是无向边。
无向完全图:在无向图中,任意两个顶点之间都存在边。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/84a7f68e73592cb6ac05f981a812b93b.png)
有向边:若从顶点 vi 到 νj的边有方向,则称这条边为有向边,也称为弧(Arc)。
用有序偶<Vi,Vj>来表示,ⅵ称为弧尾(Tail),vj称为弧头(Head)。有向图 (Directed graphs):图中任意两个顶点之间的边都是有向边。
有向完全图:在有向图中,任意两个顶点之间都存在方向互为相反的两条弧。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/5b419dbd4ceb4bfe5326fc8803ac06af.png)
三、权的定义
有些图的边或弧具有与它相关的数字,这种与图的边或弧相关的数叫做权
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/7846ed7524b6c8d3adae435ee65332e8.png)
四、连通图的定义
在无向图G中,如果从顶点v到顶点v’有路径,则称ⅴ和v’是连通的。如果对于图中任意两个顶点 vi、vj∈E, vi和vj都是连通的,则称G是连通图(ConnectedGraph)。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/33898ccfc4bb147982fa286f6c9a395f.png)
五、度的定义
无向图顶点的边数叫度,有向图顶点的边数叫出度和入度
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/1ea841a97533282f0bb7a7cf885c3430.png)
六、图的存储方式
6.1、邻接矩阵存储
图的邻接矩阵(Adjacency Matrix) 存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。
- 无向图的邻接矩阵。
无向图的边数组是一个对称矩阵
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/4a1b716dbe093ae4ca664bd19e9537db.png)
- 有向图的邻接矩阵。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/7d5549d177a69bfa12bbd275322fa87c.png)
- 带权邻接矩阵。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/13c555974b057608babc5654be6c0418.png)
6.2、邻接表存储
邻接表:散列链表存储方式,也就是数组+链表的形式。
- 无向图的邻接表
其中数组表示定点Vertex,链表表示边Edge。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/4ead224027cefa0f762c00d0bf491aaf.png)
- 有向图的邻接表
其中数组表示顶点Vertex,链表存储出度关系的边,即弧Arc,如图<V0,V3>。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/b3ff61359c0b58d44dd55abb9f270b9b.png)
除此之外,还有逆邻接表,如图弧<V1,V0><V2,V0>,链表存储入度关系的边
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/c00d9199958075942cf8162c38eb26bd.png)
- 带权值邻接表
在邻接表的基础上,链表多了一个权重字段。
![image-20220127202810611](https://i-blog.csdnimg.cn/blog_migrate/39b9f9d6ddbda637f6082c92c8dad052.png)