图是一种非线性数据结构,由顶点集合(vertex)和边的集合组成的一种数据结构。
Graph=(V,E);
V={x|x是顶点集合}; V是顶点的集合
E={<x,y>|x,y属于V}; E是边的集合


图分为无向图和有向图。
1、无向图

2、有向图

完全图:在由n个顶点组成的无向图中,若有N(N-1)/2条边,则成为无向完全图。(也就是说任意两个点都有路径)
边的权重:权重表示对边赋予的权值。

邻接顶点:如果两个顶点之间有边,则这两个顶点就互为邻接顶点。

度:与顶点v关联的边的数目称为顶点v的度。
路径:在图G=(V,E)中,若从顶点v1出发,沿着边经过若干顶点v2、v3...到v8,则(v1,v2...v8)就是顶点v1到顶点v8的路径。

连通图:在无向图中,若任意两个顶点之间都有路径,则此图就是连通图。
强连通图:在有向图中,若每一对顶点之间都存在路径,则称此图就是强连通图。

图的存储:
  图由顶点和边组成,所以在存储的时候我们不仅要存储图的顶点,还要存储图的边。图的存储有两种方式,邻接矩阵和邻接表。

邻接矩阵:将所有顶点的信息组织成一张一个顶点表,然后利用矩阵来存储顶点之间的关系。
例:

  可以看到,邻接矩阵是非常耗费内存的,对于无向图来说我们可以只存下三角或者只存上三角来节省空间。但是如果我们要在邻接矩阵中寻找某一条边存在还是不存在,则邻接矩阵的效率就是O(1),直接用这两个顶点所对应的存储位置作为下标到矩阵中寻找就行了。用邻接矩阵存储边的话实际上是将所有的点都存储下来了。


邻接表:使用数组来存储顶点的集合,使用链表来存储顶点之间边的关系。

 可以看到邻接表更节省空间,如果我们要求图中有多少条边的话,则用邻接表是非常快的。用邻接表存储边的话有多少条边就有多少个结点,所以它真正存储的就是边。

图的遍历:

  图的遍历右两种方式,深度优先遍历(DFS)和广度(BFS)优先遍历。深度优先遍历就是沿着一条路径一直走到底,直到走不下去的时候再返回上一个路口寻找一条没走过的路径再走。广度优先遍历是一种层层递进的思想,以起点为中心,一层一层的访问。

最小生成树:
  首先要明白最小生成树的概念是针对于无向图而言的。对于一个连通图,图中有N个顶点。如果我们能在连通图中选取N-1条边将图的所有顶点连在一起且不构成回路,则这N-1条边就构成了一个生成树。如果这N-1条边的权值和最小,则就构成了最小生成树。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值