无向图邻接表实现

19 篇文章 0 订阅
6 篇文章 0 订阅

图是由一组顶点和一组能够将两个顶点相连的边组成,使用邻接表来组建,即使用一个背包数组来实现。节点由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<Integer>[] adj;   //邻接表
	private int V;                //顶点数
	private int E;                //边数

	public Graph(int V){
        this.V = V;
        adj = (Bag<Integer>[]) new Bag[V};
        for(int i=0;i<V;i++){
			adj[i] = new Bag<Integer>();
		}
	}
	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<Integer> adj(int v){
		return adj[v];
	}

	//下面为背包结构
	private class  Bag<Item> implements Iterable<Item>{
		Node first;
		int N;
		class Node<Item>{
			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<Item> iterator() {
			
			return new MIterator();
		}
		private class MIterator implements Iterator<Item>{
			Node f = first;
			@Override
			public boolean hasNext() {
				return f!=null;
			}

			@Override
			public Item next() {
				Item item = (Item) f.item;
				f = f.next;
				return item;
			}
			
		}
	}
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值