一、图的快速入门案例

要求: 代码实现如下图结构
数据结构-图的快速入门 - 图1

  1. public class GraphDemo{
  2. public static void main(String[] args) {
  3. //测试一把图是否创建 ok
  4. int n = 8; //结点的个数
  5. //String Vertexs[] = {"A", "B", "C", "D", "E"};
  6. //创建图对象
  7. Graph graph = new Graph(n);
  8. //循环的添加顶点
  9. for(String vertex: Vertexs) {
  10. graph.insertVertex(vertex);
  11. }
  12. //显示一把邻结矩阵
  13. graph.showGraph();
  14. }
  15. }
  16. public class Graph {
  17. private ArrayList<String> vertexList; //存储顶点集合
  18. private int[][] edges; //存储图对应的邻结矩阵
  19. private int numOfEdges; //表示边的数目
  20. //构造器
  21. public Graph(int n) {
  22. //初始化矩阵和 vertexList
  23. edges = new int[n][n];
  24. vertexList = new ArrayList<String>(n);
  25. }
  26. //图中常用的方法
  27. //返回结点的个数
  28. public int getNumOfVertex() {
  29. return vertexList.size();
  30. }
  31. //显示图对应的矩阵
  32. public void showGraph() {
  33. for(int[] link : edges) {
  34. System.err.println(Arrays.toString(link));
  35. }
  36. }
  37. //得到边的数目
  38. public int getNumOfEdges() {
  39. return numOfEdges;
  40. }
  41. //返回结点 i(下标)对应的数据 0->"A" 1->"B" 2->"C"
  42. public String getValueByIndex(int i) {
  43. return vertexList.get(i);
  44. }
  45. //返回 v1 和 v2 的权值
  46. public int getWeight(int v1, int v2) {
  47. return edges[v1][v2];
  48. }
  49. //插入结点
  50. public void insertVertex(String vertex) {
  51. vertexList.add(vertex);
  52. }
  53. //添加边
  54. /**
  55. *
  56. * @param v1 表示点的下标即使第几个顶点 "A"-"B" "A"->0 "B"->1
  57. * @param v2 第二个顶点对应的下标
  58. * @param weight 表示
  59. */
  60. public void insertEdge(int v1, int v2, int weight) {
  61. edges[v1][v2] = weight;
  62. edges[v2][v1] = weight;
  63. numOfEdges++;
  64. }
  65. }