术语定义:
数据结构:
使用邻接表来表示有向图,其中v->w表示为顶点v对应的邻接链表中包含一个w顶点。
有向图API:
public class Digraph Digraph(int V) 创建一个含有V个顶点但不含有边的有向图 int V() 顶点数 int E() 边数 void addEdge(int v,int w) 向图中添加一条边v--w Iterable<Integer> adj(int v) 由v指出的边所连接的所有顶点 Digraph reverse() 该图的反向图 String toString() 对象的字符串表示
实现:
public class Digraph {
private int V;//顶点数
private int E;//边数
private Bag<Integer>[] adj;//邻接表
public Digraph(int V) {
this.V = V;
adj = (Bag<Integer>[]) new Bag[V];
for(int i=0;i<adj.length;i++)
adj[i] = new Bag<Integer>();
}
public int V() {return V;}
public int E() {return E;}
public void addEdge(int v,int w)
{ adj[v].add(w); E++;}
//顶点v所关联的所有顶点
public Iterable<Integer> adj(int v){return adj[v];}
//有向图的反转
public Digraph reverse() {
Digraph R = new Digraph(V);
for(int v=0; v<V;v++)
for(int w : adj(v))
R.addEdge(w, v);
return R;
}
}