図構造の基礎実装(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の間です.