基本概念
图的定义
图是由一些点和这些点之间的连线所组成;其中,点通常被称为“顶点”,而点与点之间的连线则被称为“边或弧”,通常记为:G = (V,E)
图的种类
根据边是否有方向,将图可以划分为:无向图和有向图。
无向图是一种特殊的有向图,它的每一条边都有两个方向
临接点和度
邻接点
一条边上的两个顶点叫做邻接点。
例如:上图无向图G0中的顶点A和顶点C就是邻接点
在有向图中,除了邻接点之外,还有“入边”和“出边”的概念。
顶点的入边,是指以该顶点为终点的边。而顶点的出边,则是指以该顶点为起点的边。
例如:上面有向图G2中B和E是邻接点;<B,E>是B的出边,还是E的入边。
度
在无向图中,某个顶点的度是邻接到该顶点的边(或弧)的数目。
例如,上面无向图G0中的顶点A的度是2
在有向图中,度还有“入度”和“出度”之分。
某个顶点的入度,是指以该顶点为终点的边的数目。而顶点的出度,则是指以该顶点为起点的边的数目。
例如:上面有向图G2中,顶点B的入度是2,出度是3;顶点B的度*=2+3=5***
图的存储结构
邻接矩阵
邻接矩阵是指由矩阵来表示图。它是采用矩阵来描述图中顶点之间的关系(及弧或边的权)
假设图中的顶点数为n,则邻接矩阵的定义为:
通常采用两个数组来实现邻接矩阵:一个一维数组用来保存顶点信息,一个二维数组用来保存边的信息。
邻接矩阵的缺点就是比较耗费空间。
邻接表
邻接表是图的一种链式存储表示方法。它是改进后的“邻接矩阵”,它的缺点是不方便判断两个顶点之间是否有边,但是相对邻接矩阵来说更省空间。
邻接矩阵实现无向图
public class MatrixNDG {
int size;//图顶点个数
char[] vertexs;//图顶点名称
int[][] matrix;//图关系矩阵
public MatrixNDG(char[] vertexs, char[][] edges) {
size = vertexs.length;
matrix = new int[size][size];//图关系矩阵大小
this.vertexs = vertexs;
for (char[] c:edges) {
//设置矩阵值
int p1 = getPosition(c[0]);//根据顶点名称确定对应矩阵下标
int p2 = getPosition(c[1]);
matrix[p1][p2] =