一、图的数据结构
图有两种表示方式:邻接矩阵和邻接表。
1. 邻接矩阵
以矩阵A(i,j)表示,设图有N个结点,结点为x1...xN,则A(i,j)为N*N矩阵。如果存在x(i)到x(j)的边,则A(i,j)=w,否则A(i,j)=0(w为权值,无权值情况下为1)。那么显然,邻接矩阵适用边较多的图(稠密图)。他的空间复杂度为O(V^2)(恒定的)。
2. 邻接表
邻接表是数组和链表的组合。
3. 两种表示方式比较
邻接矩阵可以很方便的判断两个顶点之间是否存在边以及出入度的计算。另外,如果非加权图,邻接矩阵的每个元素只用一个二进制位即可。再者,当为无向图时,还可以将邻接矩阵压缩,只需要n(n+1)/2个元素。
邻接表更适宜扩展,比如结点有许多的卫星数据。
4. 如果用Python实现,图可以用字典和列表的组合实现,如:
graph = {'A':['B', 'C'], 'B':['C', 'D'], 'C':['D'], 'D':['C'], 'E':['F'], 'F':['C']}
key为结点,key的值是个列表,为以A为入度的边的出度。
二、