首先是图的表示,邻接矩阵和邻接表。实现看代码
- 邻接矩阵:二维数组,
- matrix[a][b] 表示 从a可以指向b
- 无向图而言, matrix[a][b]=matrix[b][a],比如可以定义matrix[a][b]=1表示ab是连接的,matrix[a][b]=0表示ab是不可连接的
- 有向图:matrix[a][b]=x,表示从a到b的权是x,如果matrix[a][b]=无穷大,表示ab是不可连接的
- 邻接表:
- 外层是一个数组,数组长度表示图中有多少个节点,数组下标对应节点a
- 每个数组中,存放一个链表,链表的每个节点也是数组
- 链表长度代表从a可以直接指向多少个节点
- 链表元素树一个数组,数组第一个元素代表被执向的b,第二个元素代表a到b的权
个人感觉,邻接矩阵适合无向图,邻接表适合有向图。
/**
* 邻接矩阵
*
* @param n 初始化图中节点的个数
* @param edges edges边,从edge[0]指向edge[1],路径长度为edge[2]
* @return matrix
*/
public int[][] adjacentMatrix(int n, int[][] edges) {
// 邻接矩阵就是一个二维数组,很好理解,对应坐标的值是路径长度
int[][] matrix = new int[n][n];
for (int[] edge : edges