// Copyright 2003, Trustees of Indiana University // Please see the license in the file ../LICENSE using GCollections; public class adj_list_edge: GraphEdge { private Vertex source_, target_; public adj_list_edge(Vertex s, Vertex t) { source_ = s; target_ = t; } public Vertex source {get {return source_;}} public Vertex target {get {return target_;}} public override string ToString() { return "edge(" + source_ + " -> " + target_ + ")"; } public override int GetHashCode() { return source_.GetHashCode() + target_.GetHashCode(); } public override bool Equals(object o) { adj_list_edge oo = (adj_list_edge)(o); if (oo == null) return false; return (source_.Equals(oo.source) && target_.Equals(oo.target)); } } public class adjacency_list : VertexListAndIncidenceAndEdgeListGraph< int, adj_list_edge, IEnumerable, IEnumerable >, IEnumerable > > { public adjacency_list() { vertices_ = new ArrayList(); edges_ = new HashMap > >(); all_edges_ = new ArrayList >(); } private ArrayList vertices_; public IEnumerable vertices() { return vertices_; } public int num_vertices() { return vertices_.Count; } private HashMap > > edges_; private ArrayList > all_edges_; public IEnumerable > out_edges(int v) { return edges_[v]; } public int out_degree(int v) { return edges_[v].Count; } public void add_vertex(int v) { vertices_.AddLast(v); edges_[v] = new ArrayList >(); } public void add_edge(int u, int v) { adj_list_edge edge = new adj_list_edge(u,v); edges_[u].AddLast(edge); all_edges_.AddLast(edge); } public IEnumerable > edges() { return all_edges_; } }