为G=(V, E),V是顶点A的有限集合,E是边的有限集合,即
V={A|A∈某个数据集合}, E={(A, B)|A, B∈V}
或
E={<A, B> |A, B∈V 且 path(A, B)}
其中,path(A, B)表示从顶点A到B的一条通路。
学习情境6 图
2.图的类型 (1) 无向图。 无向图(undirected graph)中的边没有方向,每条边用两个 顶点的无序对表示,如(A, B)表示连接顶点A和B之间的一条 边,(A, B)和(B, A)表示同一条边。图6-1是一个无向图,用G 表示无向图,其顶点集合V为
V(G)={A,B,C,D,E} E(G)={<A,B>,<A,D>,<A,E>,<B,C>,<C,B>,<C,D>,<D,B> ,<D,E>,<E,A>}
学习情境6 图
图6-2 有向图
学习情境6 图
(3) 自身环的图和多重图。 如图6-3所示,顶点C有一个路径指向自身,这种图称为 带自身环的图;顶点B有两条路径到顶点A,这种图属于多重 图。这些一般不属于数据结构讨论的范畴,本学习情境只讨 论无向图和有向图。 (4) 完全图。 完全图(complete graph)的任一顶点均有路径到其他顶点。 完全图的边数是最大的。无向完全图的边数有n × (n-1)/2,有 向完全图的边数为n × (n-1)。
学习情境6 图
图6-13 邻接表元素
学习情境6 图
图6-14 带权无向图的邻接表表示
学习情境6 图
3.有向图的邻接表表示 以邻接表表示有向图,需要根据边的方向而得到边表, 边表有两种:出边表和入边表。 出边表:第i行单链表存储以顶点vi为起点的所有边<vi, vj>,dest域是该条边的终点vj在顶点表中的下标。 入边表:第i行单链表存储以顶点vi为终点的所有边<vj, vi>,dest域是该条边的起点vj在顶点表中的下标。 有向图的邻接表表示有两种,分别是由出边表构成的邻 接表和由入边表构成的逆邻接表。带权有向图邻接表的出边 表表示如图6-15所示。在有向图的邻接表或逆邻接表中,每 条边只存储一次。