1、非线性数据结构图,图的定义 图的存储结构与实现 图的遍历,图:图G由集合V和集合E组成,记为 G(V,E)其中:V是顶点元素的有限集合,E是顶点间关系边的有限集合。(边是顶点的无序对或有序对),(a) 无向图,(b) 有向图,G1,G2,G3,无向图:由没有方向的边构成的图称为无向图。无向图中的边由顶点的无序偶对(无序对偶用圆括号括起来)组成。 邻接点:无向图中,若存在一条边(vi, vj),则称vi和vj互为邻接点。称边(vi, vj)依附于顶点vi和vj或称边(vi, vj)与顶点vi和vj相关联。 例如:右面无向图中的边是无方向的, 即(v1,v2)和 (v2,v1)表示同一条边。,有向
2、图:由有方向的边构成的图称为有向图。弧:有向图中的边由顶点的有序偶对(有序偶对用尖括号括起来)组成,也称作弧。有向图中顶点的有序偶对表示从顶点vi指向顶点vj的一条有向边(也称弧),其中顶点vi是有向边的起点(也称弧尾),顶点vj是有向边的终点(也称弧头)。 例如:右面有向图中的边是有方向的,和 是两条不同的边。 弧中, v1为起点(弧尾), v2为终点(弧头)。弧尾 弧头,2,4,5,1,3,6,G1,图G1中:V(G1)=1,2,3,4,5,6E(G1)=, , , , , , ,1,5,7,3,2,4,G2,6,图G2中:V(G2)=1,2,3,4,5,6,7E(G1)=(1,2), (
3、1,3), (2,3), (2,4),(2,5), (5,6), (5,7),完全图:图中任意两顶点间均有边相连。 无向完全图:有n个顶点和n(n-1)/2条边的无向图 有向完全图:有n个顶点和n(n-1)条弧的有向图。子图:对于图G=(V,E)和图G=(V,E),若存在VV且EE,则称图G是图G的子图。,顶点的度 无向图中,顶点的度是与每个顶点相连的边数无向图中总度数是总边数的两倍 有向图中,顶点的度分成入度与出度入度:以该顶点为头(终点)的弧的数目出度:以该顶点为尾(起点)的弧的数目顶点v的度等于顶点v的入度和出度之和有向图中总入度、总出度和总边数相等,顶点2入度:1 出度:3 顶点4入度
4、:1 出度:0,顶点5的度:3 顶点2的度:4,路径:在图G中,从顶点vi出发,经过一系列的边或弧能够到达顶点vj,则称顶点vi到顶点vj的顶点序列为从顶点vi到顶点vj的路径 路径长度:沿路径边的数目或各边权值之和 回路:第一个顶点和最后一个顶点相同的路径 简单路径:序列中顶点不重复出现的路径 简单回路:除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路,路径:1,2,3,5,6,3 路径长度:5 回路:1,2,3,5,6,3,1 简单路径:1,2,3,5 简单回路:3,5,6,3,连通:顶点V到W有一条路径则V和W是连通的 连通图:图中任意两个顶点都是连通的 连通分量:非连通图的每一
5、个连通部分 强连通图:有向图中任意不同的顶点Vi和Vj,从Vi到Vj 和从Vj到 Vi都存在路径,权:图中边或弧上附带的数据称为权。 网:带权的图称为网。 生成树:包含连通图全部顶点的极小连通子图。即以最少的边连接连通图中所有顶点。 有n个顶点的连通图,它的生成树一定包含n个顶点和n-1条边。若加上一条边则构成环,若减去一条边则是非连通图。,图的存储结构与实现,邻接矩阵 邻接表,表示顶点间相联关系的矩阵:设G=(V,E)是有n1个顶点的图,G的邻接矩阵A是具有以下性质的n阶方阵特点: 无向图的邻接矩阵对称 有向图邻接矩阵不一定对称 无向图中Vi的度是邻接矩阵中第i行元素之和 有向图中, 顶点V
6、i的出度是A中第i行元素之和 顶点Vi的入度是A中第i列元素之和,邻接矩阵,有向图的邻接矩阵,无向图的邻接矩阵,邻接表:由顶点表和边表组成,是链式存储结构,邻接表,顶点表:存放图中每个顶点的信息以及指向该顶点边表的头指针。顶点表通常采用顺序存储结构 顶点表的结点结构:顶点域data存放顶点信息,head为边表头指针,边表:为图中的每个顶点建立的单链表,单链表中存放与同一个顶点相邻接的邻接点,相当于邻接矩阵中的一行 边表的结点结构:邻接点域adjvex存放邻接点在顶点表中的序号,next为指向下一个邻接点的指针,顶点表,边表,特点 有向图中 顶点Vi的出度是第i个单链表中的结点个数 顶点Vi的入
7、度时整个单链表中邻接点域值为i的结点个数,特点 无向图中顶点Vi的度是第i个单链表中的结点数,逆邻接表:结构与邻接表完全相同,只是边表中每个结点存放的是每条弧的弧尾顶点,从图的某一顶点V出发,访问此顶点;然后依次从V的未被访问的邻接点出发,深度优先遍历图,直至图中所有和V相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止。,深度优先遍历(DFS),从任意顶点开始访问然后访问它的一个没有访问过的邻接点若被访问过的顶点无未访问过的邻接点,则后退寻找,直至全部被访问为止,1,2,3,7,5,4,6,8,9,该图的深度优先搜
8、索的输出序列为: ABCFEGDHI,为图设置一个访问标志数组visitedn,它只有0和1两个值。,深度优先遍历过程,深度遍历:V1 V2 V4 V8 V5 V6 V3 V7,V1,V2,V4,V5,V3,V7,V6,V8,无向图,深度遍历:V1 V2 V4 V8 V3 V6 V7 V5,V1,V2,V4,V5,V3,V7,V6,V8,有向图,从图的某一顶点V出发,访问顶点;再依次访问V的各个未曾访问过的邻接点;然后分别从这些邻接点出发,广度优先遍历图,直至图中所有已被访问的顶点的邻接点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点
9、都被访问为止。,广度优先遍历(BFS),从任意一个顶点开始访问然后访问它的所有未访问过的邻接点再从这些被访问的顶点出发,去访问它的所有未被访问的邻接点,直到所有顶点被访问为止,1,2,5,4,3,7,6,8,9,该图的广度优先搜索的输出序列为: ABEDCGFHI,广度优先遍历过程,广度遍历:V1 V2 V3 V4 V5 V6 V7 V8,V1,V2,V4,V5,V3,V7,V6,V8,无向图,广度遍历:V1 V2 V3 V4 V6 V7 V8 V5,V1,V2,V4,V5,V3,V7,V6,V8,有向图,遍历序列:,B,H,C,G,D,F,E,借助队列完成图的广度优先遍历,队列:,A,A,B,H,C,G,D,F,E,动画,