一.图的表示
1.顶点的表示:使用整数0~V-1来表示。即使顶点是字母表示的,也可以利用符号表转换为顶点名字和整数一一对应的关系。
2.图的表示方法:实际中最常用的一种是邻接表数组(Adjaxency-list )
(1)使用数组表示以每一个顶点为索引的列表
(2)数组中的元素表示与该顶点邻接的顶点所构成的集合(这里使用ArrayList/bag来承载邻接元素)
3.代码实现
package com.cx.graph; import edu.princeton.cs.algs4.Bag; //无向图的表示 public class Graph { private final int V; //邻接表数组,里面的每个元素都是一个集合类 private Bag<Integer>[] adj; //初始化V个顶点的图 public Graph(int V) { this.V=V; adj=(Bag<Integer>[])new Bag[V]; //将每个元素初始化,不然会为null for(int v=0;v<V;v++) { adj[v]=new Bag<Integer>(); } } public void addEdge(int v,int w) { adj[v].add(w); adj[w].add(v); } //顶点v的邻接元素集合 public Iterable<Integer> adj(int v){ return adj[v]; } //点的度数 public static int degree(Graph G,int v) { int degree=0; for(int w:G.adj(v)) degree++; return degree; } public int V() {return V;} }