无向图中的顶点用数组的索引表示,该索引中的元素用bag表示,而这些元素指的是索引对应的顶点所连接的顶点。
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 i = 0; i < V; 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);// 将w添加到v的链表中
adj[w].add(v);// 将v添加到w的链表中
E++;
}
public Iterable<Integer> adj(int v) {
return adj[v];
}
}
Bag
import java.util.Iterator;
public class Bag<Item> implements Iterable<Item> {
private Node first;// 头结点
// 链表的结点
private class Node {
Item item;
Node next;
}
public void add(Item item) {
Node oldfirst = first;
first = new Node();
first.item = item;
first.next = oldfirst;
}
public Iterator<Item> iterator() {
return new listIterator();
}
private class listIterator implements Iterator<Item> {
private Node current = first;
public boolean hasNext() {
return current != null;
}
public Item next() {
Item item = current.item;
current = current.next;
return item;
}
}
}