1、图的基本概念
 (1)定义
 图是一种较为复杂的非线性结构。
 图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为G(V,E),其中,G表示一个图,V表示顶点的集合,E表示边的集合。
 (2)顶点
 图中的数据元素,我们称之为顶点,图至少有一个顶点(非空有穷集合)。
 (3)边
 顶点之间的关系用边表示。
 (4)度、入度、出度
 度表示一个顶点包含多少条边,在有向图中,还分为出度和入度,出度表示从该顶点出去的边的条数,入度表示进入该顶点的边的条数。
 (5)无向图、有向图
 边表示的是顶点之间的关系,有的关系是双向的,比如同学关系,A是B的同学,那么B也肯定是A的同学,用不带箭头的边表示二者的关系,这样的图就是无向图。有的关系是有方向的,比如父子关系,A是B的爸爸,但B肯定不是A的爸爸,用带箭头的边表示二者的关系,这样的图就是有向图。
 (6)无权图、有权图
 对于一个关系,如果我们只关心关系的有无,而不关心关系有多强,那么就可以用无权图表示二者的关系。
 对于一个关系,如果我们既关心关系的有无,也关心关系的强度,比如描述地图上两个城市的关系,需要用到距离,那么就用带权图来表示,带权图中的每一条边一个数值表示权值,代表关系的强度。
 2、图的存储
 (1)邻接矩阵存储
 邻接矩阵将图用二维矩阵存储,是一种较为直观的表示方式。
 如果第i个顶点和第j个顶点之间有关系,且关系权值为n,则A[i][j]=n。在无向图中,我们只关心关系的有无,所以当顶点i和顶点j有关系时,A[i][j]=1,当顶点i和顶点j没有关系时,A[i][j]=0。
 无向图的邻接矩阵是一个对称矩阵,因为在无向图中,顶点i和顶点j有关系,则顶点j和顶点i必有关系。
 邻接矩阵存储的方式优点是简单直接(直接使用一个二维数组即可),并且,在获取两个定点之间的关系的时候也非常高效(直接获取指定位置的数组元素的值即可)。但是,这种存储方式的缺点也比较明显,那就是比较浪费空间。


 (2)邻接表存储
 邻接链表使用一个链表来存储某个顶点的所有后继相邻顶点。对于图中每个顶点Vi,把所有邻接于Vi的顶点Vj链成一个单链表,这个单链表称为顶点Vi的邻接表。
 在无向图中,邻接表元素个数等于边的条数的两倍。在有向图中,邻接表元素个数等于边的条数。


 3、图的搜索
 (1)广度优先搜索
 广度优先搜索的具体实现方式用到了之前所学过的线性数据结构——队列。






 (2)深度优先搜索
 和广度优先搜索类似,深度优先搜索的具体实现用到了另一种线性数据结构——栈。
 
 
 
 
 
 



















