structure
Class GraphMatrix

java.lang.Object
  extended by structure.AbstractStructure
      extended by structure.GraphMatrix
All Implemented Interfaces:
Graph, Structure
Direct Known Subclasses:
GraphMatrixDirected, GraphMatrixUndirected

public abstract class GraphMatrix
extends AbstractStructure
implements Graph

Implementation of graph using adjacency matrices. User must commit to maximum size of graph (in vertices); it may be smaller. Edges are stored in matrix. Not suitable for large graphs. Class is abstract: you must use GraphMatrixDirected or GraphMatrixUndirected to construct particular instances of graphs. Typical usage:

     Graph g = new GraphMatrixUndirected();
     g.add("harry");
     g.add("sally");
     g.addEdge("harry","sally","unfriendly");
     ...
 

See Also:
GraphMatrixDirected, GraphMatrixUndirected, GraphList

Method Summary
 void add(Object label)
          Add a vertex to the graph.
abstract  void addEdge(Object v1, Object v2, Object label)
          Add an edge between two vertices within the graph.
 void clear()
          Remove all vertices (and thus, edges) of the graph.
 boolean contains(Object label)
          Test for vertex membership.
 boolean containsEdge(Object vLabel1, Object vLabel2)
          Test for edge membership.
 int degree(Object label)
          Determine out degree of vertex.
abstract  int edgeCount()
          Determine the number of edges in graph.
abstract  Iterator edges()
          Construct an traversal over all edges.
 Object get(Object label)
          Get reference to actual label of vertex.
 Edge getEdge(Object label1, Object label2)
          Get reference to actual edge.
 boolean isDirected()
          Determine if graph is directed.
 boolean isEmpty()
          Determine if graph is empty.
 boolean isVisited(Object label)
          Return visited flag of vertex.
 boolean isVisitedEdge(Edge e)
          Return visited flag of edge.
 Iterator iterator()
          Construct vertex traversal.
 Iterator neighbors(Object label)
          Construct an adjacent vertex traversal.
 Object remove(Object label)
          Remove a vertex from the graph.
abstract  Object removeEdge(Object vLabel1, Object vLabel2)
          Remove possible edge between vertices labeled vLabel1 and vLabel2.
 void reset()
          Clear visited flags of edges and vertices.
 int size()
          Determine number of vertices within graph.
 boolean visit(Object label)
          Test and set visited flag of vertex.
 boolean visitEdge(Edge e)
          Test and set visited flag of edge.
 
Methods inherited from class structure.AbstractStructure
elements, hashCode, values
 
Methods inherited from class java.lang.Object
equals, getClass, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface structure.Structure
elements, values
 

Method Detail

add

public void add(Object label)
Add a vertex to the graph.

Specified by:
add in interface Graph
Specified by:
add in interface Structure
Parameters:
label - Label of the vertex; should be non-null.

addEdge

public abstract void addEdge(Object v1,
                             Object v2,
                             Object label)
Add an edge between two vertices within the graph. Edge is directed iff graph is directed. Duplicate edges are silently replaced. Labels on edges may be null.

Specified by:
addEdge in interface Graph
Parameters:
vtx1 - First (or source, if directed) vertex.
vtx2 - Second (or destination, if directed) vertex.
label - Label associated with the edge.

remove

public Object remove(Object label)
Remove a vertex from the graph. Associated edges are also removed. Non-vertices are silently ignored.

Specified by:
remove in interface Graph
Specified by:
remove in interface Structure
Parameters:
label - The label of the vertex within the graph.
Returns:
The label associated with the vertex.

removeEdge

public abstract Object removeEdge(Object vLabel1,
                                  Object vLabel2)
Remove possible edge between vertices labeled vLabel1 and vLabel2. Directed edges consider vLabel1 to be the source.

Specified by:
removeEdge in interface Graph
Parameters:
vLabel1 - First (or source, if directed) vertex.
vLabel2 - Second (or destination, if directed) vertex.
Returns:
The label associated with the edge removed.

get

public Object get(Object label)
Get reference to actual label of vertex. Vertex labels are matched using their equals method, which may or may not test for actual equivalence. Result remains part of graph.

Specified by:
get in interface Graph
Parameters:
label - The label of the vertex sought.
Returns:
The actual label, or null if none is found.

getEdge

public Edge getEdge(Object label1,
                    Object label2)
Get reference to actual edge. Edge is identified by the labels on associated vertices. If edge is directed, the label1 indicates source.

Specified by:
getEdge in interface Graph
Parameters:
label1 - The first (or source, if directed) vertex.
label2 - The second (or destination, if directed) vertex.
Returns:
The edge, if found, or null.

contains

public boolean contains(Object label)
Test for vertex membership.

Specified by:
contains in interface Graph
Specified by:
contains in interface Structure
Overrides:
contains in class AbstractStructure
Parameters:
label - The label of the vertex sought.
Returns:
True iff vertex with matching label is found.

containsEdge

public boolean containsEdge(Object vLabel1,
                            Object vLabel2)
Test for edge membership. If edges are directed, vLabel1 indicates source.

Specified by:
containsEdge in interface Graph
Parameters:
vLabel1 - First (or source, if directed) vertex.
vLabel2 - Second (or destination, if directed) vertex.
Returns:
True iff the edge exists within the graph.

visit

public boolean visit(Object label)
Test and set visited flag of vertex.

Specified by:
visit in interface Graph
Parameters:
label - Label of vertex to be visited.
Returns:
Previous value of visited flag on vertex.

visitEdge

public boolean visitEdge(Edge e)
Test and set visited flag of edge.

Specified by:
visitEdge in interface Graph
Parameters:
e - Edge object that is part of graph.
Returns:
Previous value of the Edge's visited flag.

isVisited

public boolean isVisited(Object label)
Return visited flag of vertex.

Specified by:
isVisited in interface Graph
Parameters:
label - Label of vertex.
Returns:
True if vertex has been visited.

isVisitedEdge

public boolean isVisitedEdge(Edge e)
Return visited flag of edge.

Specified by:
isVisitedEdge in interface Graph
Parameters:
e - Edge of graph to be considered.
Returns:
True if the edge has been visited.

reset

public void reset()
Clear visited flags of edges and vertices.

Specified by:
reset in interface Graph

size

public int size()
Determine number of vertices within graph.

Specified by:
size in interface Graph
Specified by:
size in interface Structure
Returns:
The number of vertices within graph.

degree

public int degree(Object label)
Determine out degree of vertex.

Specified by:
degree in interface Graph
Parameters:
label - Label associated with vertex.
Returns:
The number of edges with this vertex as source.

edgeCount

public abstract int edgeCount()
Determine the number of edges in graph.

Specified by:
edgeCount in interface Graph
Returns:
Number of edges in graph.

iterator

public Iterator iterator()
Construct vertex traversal. Vertices are not visited in any guaranteed order.

Specified by:
iterator in interface Graph
Specified by:
iterator in interface Structure
Returns:
AbstractIterator traversing vertices in graph.
See Also:
AbstractIterator, Iterator, Enumeration, Structure.elements()

neighbors

public Iterator neighbors(Object label)
Construct an adjacent vertex traversal. Adjacent vertices (those on destination of edge, if directed) are considered, but not in any guaranteed order.

Specified by:
neighbors in interface Graph
Parameters:
label - Label of the vertex.
Returns:
AbstractIterator traversing the adjacent vertices of labeled vertex.

edges

public abstract Iterator edges()
Construct an traversal over all edges. Every directed/undirected edge is considered exactly once. Order is not guaranteed.

Specified by:
edges in interface Graph
Returns:
AbstractIterator over edges.

clear

public void clear()
Remove all vertices (and thus, edges) of the graph.

Specified by:
clear in interface Graph
Specified by:
clear in interface Structure

isEmpty

public boolean isEmpty()
Determine if graph is empty.

Specified by:
isEmpty in interface Graph
Specified by:
isEmpty in interface Structure
Overrides:
isEmpty in class AbstractStructure
Returns:
True iff there are no vertices in graph.

isDirected

public boolean isDirected()
Determine if graph is directed.

Specified by:
isDirected in interface Graph
Returns:
True iff the graph is directed.