一:基本概念
图(Graph):用边连接在一起的顶点的集合。
G=(V,E),其中V的元素称为顶点,E的元素称为边。
顶点(vertices):图中的节点,存放数据。
边(edge):(i,j)表示顶点i和顶点j之间的边。
无向边(undirected edge):(i,j)和(j,i)表示的含义一样。
有向边(directed edge):(i,j)表示从顶点i到顶点j的边,(j,i)表示从顶点j到顶点i的边。
邻接(adjacent)和关联(incident):当且仅当(i,j)是图的边,称顶点i和顶点j是邻接的,边(i,j)关联于顶点i和j。
有向边(i,j)是关联至(incident to)顶点j而关联于(incident from)顶点i;顶点i邻接至(adjacent to)顶点j,顶点j邻接于(adjacent from)顶点i。
无向图(undirected graph):所有的边都是无向边的图。。
有向图(directed graph):所有的边都是有向边的图。
一个图不可能包含自连边(self-edge),也就是环(loop)。
权(weight):在图的某些应用中,为边赋予的值。
加权有向图(weighted digraph):边加了权值的有向图。
加权无向图(weighted undirected digraph):边加了权值的无向图。
网络(newwork):所有的图都可以看成特殊的网络。
路径:两个顶点之间能到达的通路。
简单路径:除了始点和终点之外,其余所有顶点均不相同的路径。
长度:每一条边都可以有长度,路径的长度是该路径上所有边长度之和。
连通图(connected graph):每一对顶点之间都有一条路径的图
子图(subgraph):图H的顶点和边的集合分别是图G的顶点和边的集合的子集。
环路(cycle):始点和终点相同的简单路径。
生成树(spanning tree):没有环路的连通无向图是一棵树,包含了图中所有顶点的树称为图的生成树。
一个具有n个顶点的连通无向图至少有n-1条边。
二分图(bipartite graph):顶点被分为两个子集,每条边都连接着两个字集中的顶点。
度(degree):与一个顶点相关联的边数称为该顶点的度。
入度(in-degree):有向图中关联至该顶点的边数。
出度(out-degree):有向图中关联出该顶点的边数。
完全图(complete graph):一个具有n个顶点和n(n-1)/2条边的图。也就是说任意两个顶点之间都有边。
完全有向图:n个顶点,n(n-1)条边的有向图,也就说任意两个顶点之间都有两条有向边。也叫强连通图。
二:图的描述方法
无权图的描述:
邻接矩阵(adjacent matrix):n个顶点的图的邻接矩阵是一个n*n的矩阵,其中每个元素是0或者1。对于无向图来说,两个顶点之间右边就是1,没有边就是0;对于有向图来说,有指向的边是1,没有指向的边是0。
邻接表(adjacent list):邻接表是一个线性表,包含了所有邻接于顶点i的顶点。在一个图的邻接表中,每一个顶点都有一个邻接表。
邻接链表(linked-adjacent-list):用链表描述的邻接表。
邻接数组:用数组描述的邻接表。
加权图的描述:
成本邻接矩阵(cost-adjacent-matrix):把边的权值写入邻接矩阵中即可,对于不存在的边指定一个很大的值。
如果链表的元素同时存放顶点和权值,那么就是加权图的邻接链表。
如果数组的元素同时存放顶点和权值,那么就是加权图的邻接数组。