5import java.util.TreeSet;
15 implements Iterable<Node> {
18 TreeSet<Node> nodes_ =
null;
27 public GraphAM(Node nodeGenerator,Edge edgeGenerator,
29 super(nodeGenerator,edgeGenerator);
32 nodes_=
new TreeSet<Node>();
36 return !adj_.isSymmetricMatrix();
39 @SuppressWarnings(
"unchecked")
41 Node node=(Node) nodeGenerator_.create();
43 node.index_=nodes_.size();
48 @SuppressWarnings(
"unchecked")
49 @Override
public Edge
addEdge(Node source,Node destination) {
53 throw new RuntimeException(
"edge "+source.index()+
55 destination.index()+
" exists");
57 edge=(Edge) edgeGenerator_.create();
59 if (!
isDirected() && source.index_>destination.index_) {
61 edge.src_=destination;
65 edge.dst_=destination;
68 adj_.set(source.index_,destination.index_,edge);
74 @Override
public Node
getSomeNode() {
return nodes_.first(); }
77 return (Iterator<Node>) nodes_.iterator();
80 @Override
public Edge
getEdge(Node source,Node destination) {
81 return adj_.get(source.index_,destination.index_);
84 @Override
protected Node
check(Node node) {
86 assert(nodes_.contains(node));
89 @Override
protected Edge
check(Edge edge) {
91 assert(adj_.get(edge.src_.index_,edge.dst_.index_)==edge);
96 return adj_.getColumnEntries(
check(node).index_);
99 return adj_.getRowEntries(
check(node).index_);
103 adj_.clearColumnAndRow(
check(node).index_);
104 boolean removed=nodes_.remove(node);
110 adj_.set(edge.src_.index_,edge.dst_.index_,
null);
114 return adj_.iterator();
Implementation of an array-based vector.
Interface to edges of a graph.
Interface to nodes of a graph.
Graph implementation based on adjacency matrix.
Vector< Edge > getOutEdges(Node node)
Iterator< Edge > getEdgeIterator()
Iterator< Node > iterator()
Vector< Edge > getInEdges(Node node)
void removeEdge(Edge edge)
Edge getEdge(Node source, Node destination)
void removeNode(Node node)
GraphAM(Node nodeGenerator, Edge edgeGenerator, boolean directed)
Create graph.
Edge addEdge(Node source, Node destination)
AuD lecture: Data structures, algorithms, examples.