図構造の基礎実装(java)
8351 ワード
package graph;
import edu.princeton.cs.algs4.Bag;
import edu.princeton.cs.algs4.In;
public class Graph {
private final int V; //
private int E; //
private Bag<Integer>[] adj; //
public Graph(int V) {
this.V=V;
this.E=0;
adj=(Bag<Integer>[]) //
new Bag[V];
for(int v=0;v<V;v++) //
adj[v]=new Bag<Integer>();
}
public Graph(In in) {
this(in.readInt()); // V
int E=in.readInt(); // E
for(int i=0;i<E;i++) {
int v=in.readInt(); //
int w=in.readInt(); //
addEdge(v,w); //
}
}
public int v() {
return V;
}
public int E() {
return E;
}
public void addEdge(int v,int w) {
adj[v].add(w); // w v
adj[w].add(v); // v w
E++;
}
public Iterable<Integer> adj(int v){
return adj[v];
}
}
このGraphの実装は,頂点インデックスによる整形チェーンテーブル配列を用いた.各エッジには2回、すなわちvとwを接続するエッジが1つ存在する場合、wはvのチェーンテーブルに現れ、vはwのチェーンテーブルにも現れる.2番目のコンストラクション関数は、入力ストリームから図を読み込みます.最初はV、次はE、次は整数のペアで、サイズは0からV-1の間です.