本篇目录

1 private int[] vertices;// 存储图的顶点 2 public int[][] matrix; // 存储图的边 3 private int verticeSize; // 顶点的数量 4 //带权有向图中代表相邻两个顶点之间不可达 5 private static final int MAX_WEIGHT = 0xFFFF; 6 7 public Graph(int verticeSize) { 8 this.verticeSize = verticeSize; 9 vertices = new int[verticeSize]; 10 matrix = new int[verticeSize][verticeSize]; 11 //初始化存储顶点的一维数组12 for(int i = 0; i < verticeSize; i++) { 13 vertices[i] = i; 14 } 15 } 获取图中两个顶点的权值
获取图中两个顶点的权值其实就是二维数组中对应位置的值:
1 /** 2 * 计算V1到v2 的权值 3 * @param v1 4 * @param v2 5 * @return 6 */ 7 public int getWidget(int v1, int v2) { 8 int weight = matrix[v1][v2]; 9 return weight == 0 ? 0 : (weight == MAX_WEIGHT ? -1:weight); 10 }获取图某个顶点V的出度
顶点V的出度的获取只需要遍历其所在二维数组那一行数据有几个有效权值即可:
1 /** 2 * 计算某个顶点V的出度 3 * @param v 4 * @return 5 */ 6 public int getOutDegree(int v) { 7 int count = 0; 8 for(int i = 0; i < verticeSize; i++ ) { 9 //遍历其所在二维数组那一行的数据10 if (matrix[v][i] != 0 && matrix[v][i] != MAX_WEIGHT) { 11 count ++; 12 } 13 } 14 return count; 15 }获取图某个顶点V的入度
出度是遍历其所在行,入度就是遍历其所在列了(这里不明白可以自己想想):