图 是一种非线性数据结构,又[节点(顶点) vertex] 和 [边 edge]组成,每条边连接一对顶点。
根据边的方向有无,图可分为[有向图] 和 [无向图]。 本文以无向图为例开展介绍。
如下图所示,此无向图的 顶点 和 边 集合分别为:
***顶点集合: vertices ={1,2,3,4,5}
***边集合: edges ={(1,2),(1,3),(1,4),(1,5),(2,4),(3,5),(4,5)}
表示图的方法通常有两种:
1.邻接矩阵:使用数组vertice存储顶点,邻接矩阵edges存储边;edges[i][j]代表节点 i+1 和节点 j+1 之间是否有边。
int[] vertices = {1,2,3,4,5};
int[][] edges = {{0, 1, 1, 1, 1},
{1, 0, 0, 1, 0},
{1, 0, 0, 0, 1},
{1, 1, 0, 0, 1},
{1, 0, 1, 1, 0}};
邻接矩阵 VS 邻接表 :
邻接矩阵的大小只与节点数量有关,即 N^2 ,其中 NN为节点数量。因此,当边数量明显少于节点数量时,使用邻接矩阵存储图会造成较大的内存浪费。
因此,邻接表 适合存储稀疏图(顶点较多、边较少); 邻接矩阵 适合存储稠密图(顶点较少、边较多)。