AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge > Class Template Reference

Graph implementation based on adjacency matrix. More...

+ Inheritance diagram for aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >:
+ Collaboration diagram for aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >:

Public Member Functions

 GraphAM (Node nodeGenerator, Edge edgeGenerator, boolean directed)
 Create graph. More...
 
boolean isDirected ()
 
Node addNode ()
 
Edge addEdge (Node source, Node destination)
 
int getNumNodes ()
 
Node getSomeNode ()
 
Iterator< Node > iterator ()
 
Edge getEdge (Node source, Node destination)
 
Vector< Edge > getInEdges (Node node)
 
Vector< Edge > getOutEdges (Node node)
 
void removeNode (Node node)
 
void removeEdge (Edge edge)
 
Iterator< Edge > getEdgeIterator ()
 
- Public Member Functions inherited from aud.graph.AbstractGraph< Node, Edge >
 AbstractGraph (Node nodeGenerator, Edge edgeGenerator)
 Constructor. More...
 
abstract boolean isDirected ()
 Is graph directed? More...
 
abstract Node addNode ()
 create and add new node More...
 
abstract Edge addEdge (Node source, Node destination)
 Create and add new edge from source to
destination
. More...
 
abstract void removeNode (Node node)
 Remove node and all its incident and excident edges. More...
 
abstract void removeEdge (Edge edge)
 Remove edge. More...
 
abstract int getNumNodes ()
 get number of nodes More...
 
abstract Node getSomeNode ()
 Get some node. More...
 
abstract Edge getEdge (Node source, Node destination)
 Get edge from source to destination. More...
 
Edge ensureEdge (Node source, Node destination)
 Same as getEdge but throw if there is no such edge. More...
 
abstract Vector< Edge > getInEdges (Node node)
 Get incident edges of node. More...
 
abstract Vector< Edge > getOutEdges (Node node)
 Get incident edges of node. More...
 
int getInDegree (Node node)
 get number of edges incident to node More...
 
int getOutDegree (Node node)
 get number of edges emanating from node More...
 
int getDegree (Node node)
 Get total degree. More...
 
abstract Iterator< Edge > getEdgeIterator ()
 Get iterator over all edges. More...
 
Edges edges ()
 Get Edges instance to obtain iterator. More...
 
String toString ()
 
GraphvizDecorator getDecorator ()
 get decoration or null
More...
 
String toDot ()
 Get dot representation. More...
 

Protected Member Functions

Node check (Node node)
 
Edge check (Edge edge)
 
- Protected Member Functions inherited from aud.graph.AbstractGraph< Node, Edge >
Node check (Node node)
 helper: check if node is valid More...
 
Edge check (Edge edge)
 helper: check if edge is valid More...
 

Detailed Description

Graph implementation based on adjacency matrix.

The implementation uses a sparse AdjacencyMatrix

See also
AdjacencyMatrix

Definition at line 13 of file GraphAM.java.

Constructor & Destructor Documentation

◆ GraphAM()

aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.GraphAM ( Node  nodeGenerator,
Edge  edgeGenerator,
boolean  directed 
)

Create graph.

Parameters
nodeGeneratorsame as for AbstractGraph#AbstractGraph
edgeGeneratorsame as for AbstractGraph#AbstractGraph
directedtrue for creating a directed graph, false for an undirected graph (symmetric AdjacencyMatrix)

Definition at line 27 of file GraphAM.java.

28 {
29 super(nodeGenerator,edgeGenerator);
30
31 adj_=new AdjacencyMatrix<Edge>(!directed);
32 nodes_=new TreeSet<Node>();
33 }

Member Function Documentation

◆ addEdge()

Edge aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.addEdge ( Node  source,
Node  destination 
)

Definition at line 49 of file GraphAM.java.

49 {
50 Edge edge=getEdge(check(source),check(destination));
51
52 if (edge!=null)
53 throw new RuntimeException("edge "+source.index()+
54 (isDirected() ? "->" : "--")+
55 destination.index()+" exists");
56
57 edge=(Edge) edgeGenerator_.create();
58 edge.graph_=this;
59 if (!isDirected() && source.index_>destination.index_) {
60 edge.dst_=source;
61 edge.src_=destination;
62 }
63 else {
64 edge.src_=source;
65 edge.dst_=destination;
66 }
67
68 adj_.set(source.index_,destination.index_,edge);
69
70 return edge;
71 }
boolean isDirected()
Definition: GraphAM.java:35
Edge getEdge(Node source, Node destination)
Definition: GraphAM.java:80
Node check(Node node)
Definition: GraphAM.java:84

References aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.check(), aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getEdge(), and aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.isDirected().

Referenced by aud.example.graph.MaxFlowExample.createGraph(), aud.test.GraphTest.testDouble(), aud.test.GraphTest.testDouble2(), and aud.test.GraphTest.testOther().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ addNode()

Node aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.addNode ( )

Definition at line 40 of file GraphAM.java.

40 {
41 Node node=(Node) nodeGenerator_.create();
42 node.graph_=this;
43 node.index_=nodes_.size();
44 nodes_.add(node);
45 return node;
46 }

Referenced by aud.example.graph.MaxFlowExample.createGraph(), aud.test.GraphTest.testDouble(), aud.test.GraphTest.testDouble2(), and aud.test.GraphTest.testOther().

+ Here is the caller graph for this function:

◆ check() [1/2]

Edge aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.check ( Edge  edge)
protected

Definition at line 89 of file GraphAM.java.

89 {
90 super.check(edge); // additional assertion
91 assert(adj_.get(edge.src_.index_,edge.dst_.index_)==edge);
92 return edge;
93 }

◆ check() [2/2]

Node aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.check ( Node  node)
protected

Definition at line 84 of file GraphAM.java.

84 {
85 super.check(node); // additional assertion
86 assert(nodes_.contains(node));
87 return node;
88 }

Referenced by aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.addEdge(), and aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.removeEdge().

+ Here is the caller graph for this function:

◆ getEdge()

Edge aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getEdge ( Node  source,
Node  destination 
)

Definition at line 80 of file GraphAM.java.

80 {
81 return adj_.get(source.index_,destination.index_);
82 }

Referenced by aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.addEdge(), and aud.example.graph.IterativeDFS1.start().

+ Here is the caller graph for this function:

◆ getEdgeIterator()

Iterator< Edge > aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getEdgeIterator ( )

Definition at line 113 of file GraphAM.java.

113 {
114 return adj_.iterator();
115 }

◆ getInEdges()

Vector< Edge > aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getInEdges ( Node  node)

Definition at line 95 of file GraphAM.java.

95 {
96 return adj_.getColumnEntries(check(node).index_);
97 }

◆ getNumNodes()

int aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getNumNodes ( )

Definition at line 73 of file GraphAM.java.

73{ return nodes_.size(); }

Referenced by aud.example.graph.PriorityFirstSearch.start().

+ Here is the caller graph for this function:

◆ getOutEdges()

Vector< Edge > aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getOutEdges ( Node  node)

Definition at line 98 of file GraphAM.java.

98 {
99 return adj_.getRowEntries(check(node).index_);
100 }

◆ getSomeNode()

Node aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getSomeNode ( )

Definition at line 74 of file GraphAM.java.

74{ return nodes_.first(); }

Referenced by aud.example.graph.TraversalExample.main().

+ Here is the caller graph for this function:

◆ isDirected()

boolean aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.isDirected ( )

Definition at line 35 of file GraphAM.java.

35 {
36 return !adj_.isSymmetricMatrix();
37 }

Referenced by aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.addEdge().

+ Here is the caller graph for this function:

◆ iterator()

Iterator< Node > aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.iterator ( )

Definition at line 76 of file GraphAM.java.

76 {
77 return (Iterator<Node>) nodes_.iterator();
78 }

◆ removeEdge()

void aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.removeEdge ( Edge  edge)

Definition at line 108 of file GraphAM.java.

108 {
109 check(edge);
110 adj_.set(edge.src_.index_,edge.dst_.index_,null);
111 }

References aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.check().

+ Here is the call graph for this function:

◆ removeNode()

void aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.removeNode ( Node  node)

Definition at line 102 of file GraphAM.java.

102 {
103 adj_.clearColumnAndRow(check(node).index_);
104 boolean removed=nodes_.remove(node);
105 assert(removed);
106 }

The documentation for this class was generated from the following file: