无向图邻接表实现

图是由一组顶点和一组能够将两个顶点相连的边组成,使用邻接表来组建,即使用一个背包数组来实现。节点由0带V-1组成,节点数为V,边数为E.
API:
public class Graph
Graph(int V) 创建一个含有V个顶点但不含边的无向图
int V() 顶点数
int E() 边数
void addEdge(int v , int w) 向图中添加一条边, v-m
Iterable adj(int v) 返回和v顶点相连的所有顶点
代码实现:

public class Graph{
	private Bag[] adj;   //邻接表
	private int V;                //顶点数
	private int E;                //边数

	public Graph(int V){
        this.V = V;
        adj = (Bag[]) new Bag[V};
        for(int i=0;i();
		}
	}
	public void addEdge(int v ,int w){
		adj[v].push(w);
		adj[w].push(v);
		E++;
	}
	public int V(){
		return V;
	}
	public int E(){
		return E;
	}
	public Iterable adj(int v){
		return adj[v];
	}

	//下面为背包结构
	private class  Bag implements Iterable{
		Node first;
		int N;
		class Node{
			Item item;
			Node next;
			
		}
		public void push(Item item){
			Node oldFirst = first;
			first = new Node();
			first.item = item;
			first.next = oldFirst;
			N++;
		}
		public boolean isEmpty() {
			return first==null;
		}
		@Override
		public Iterator iterator() {
			
			return new MIterator();
		}
		private class MIterator implements Iterator{
			Node f = first;
			@Override
			public boolean hasNext() {
				return f!=null;
			}

			@Override
			public Item next() {
				Item item = (Item) f.item;
				f = f.next;
				return item;
			}
			
		}
	}
}

你可能感兴趣的:(java,mathWay,graph)