## structure5 Class GraphMatrixDirected<V,E>

```java.lang.Object
structure5.AbstractStructure<V>
structure5.GraphMatrix<V,E>
structure5.GraphMatrixDirected<V,E>
```
All Implemented Interfaces:
Iterable<V>, Graph<V,E>, Structure<V>

`public class GraphMatrixDirected<V,E>extends GraphMatrix<V,E>`

A GraphMatrixDirected is a matrix-based graph representation that consists of a collection of vertices and directed edges. Portions of the graph may be marked visited to support iterative algorithms. Iteration is provided over vertices, edges, and vertices adjacent to a particular vertex. GraphMatrix differs from GraphList in that the user must commit to an upper bound on number of vertices in graph.

Example Usage:

To create a graph representation of the movie theaters nearest the Williams College Department of Computer Science's unix laboratory, and to print these theaters out in order of increasing distance, we could use the following:

```  public static void main(String[] argv){
Graph theaters = new `GraphMatrixDirected(9)`;
FibHeap heap = new FibHeap();

//instantiate array of locations
String[] locations = new String[]{"TCL 312", "Images Cinema",
"Movie Plex 3", "Cinema 1,2,&3",
"Cinema 7", "Berkshire Mall Cinemas"
,"Hathaway's Drive Inn Theatre",
"Hollywood Drive-In Theatre"};

//instantiate array of distances between `location[0]`
//and movie theaters
double[] distances =  new double[]{-1, 0.0, 12.6, 12.9, 12.9,
14.7, 16.5, 18.0};

//build graph
for(int i=0; i < locations.length; i++) theaters.add(locations[i]);
for(int i=1; i < distances.length; i++){
theaters.`addEdge(locations[0],locations[i],new Double(distances[i]))`;
}

//place neighbors of lab in into priority queue
for(Iterator i=theaters.`neighbors(locations[0])`; i.hasNext();){
Object theater = i.next();
Object distance = theaters.`getEdge(locations[0], theater).label()`;
}

//print out theaters in order of distance
while(!heap.isEmpty()){
ComparableAssociation show = (ComparableAssociation)heap.remove();
System.out.println(show.getValue()+" is "+show.getKey()+" miles away.");
}
}
```

`GraphMatrix`, `GraphMatrixUndirected`, `GraphListDirected`

Constructor Summary
`GraphMatrixDirected(int size)`
Construct a directed, adjacency-matrix based graph.

Method Summary
` void` ```addEdge(V vLabel1, V vLabel2, E label)```
Add an edge between two vertices within the graph.
` int` `edgeCount()`
Determine the number of edges in graph.
` Iterator<Edge<V,E>>` `edges()`
Construct an traversal over all edges.
` E` ```removeEdge(V vLabel1, V vLabel2)```
Remove possible edge between vertices labeled vLabel1 and vLabel2.
` String` `toString()`
Construct a string representation of graph.

Methods inherited from class structure5.GraphMatrix
`add, clear, contains, containsEdge, degree, get, getEdge, isDirected, isEmpty, isVisited, isVisitedEdge, iterator, neighbors, remove, reset, size, visit, visitEdge`

Methods inherited from class structure5.AbstractStructure
`elements, hashCode, values`

Methods inherited from class java.lang.Object
`equals, getClass, notify, notifyAll, wait, wait, wait`

Methods inherited from interface structure5.Structure
`elements, values`

Constructor Detail

### GraphMatrixDirected

`public GraphMatrixDirected(int size)`
Construct a directed, adjacency-matrix based graph.

Parameters:
`size` - The maximum number of vertices allowed in graph.
Method Detail

```public void addEdge(V vLabel1,
V vLabel2,
E label)```
Add an edge between two vertices within the graph. Edge is directed. Duplicate edges are silently replaced. Labels on edges may be null.

Specified by:
`addEdge` in interface `Graph<V,E>`
Specified by:
`addEdge` in class `GraphMatrix<V,E>`
Parameters:
`vLabel1` - Source vertex.
`vLabel2` - Destination vertex.
`label` - Label associated with the edge.

### removeEdge

```public E removeEdge(V vLabel1,
V vLabel2)```
Remove possible edge between vertices labeled vLabel1 and vLabel2. vLabel1 is the source.

Specified by:
`removeEdge` in interface `Graph<V,E>`
Specified by:
`removeEdge` in class `GraphMatrix<V,E>`
Parameters:
`vLabel1` - Source vertex.
`vLabel2` - Destination vertex.
Returns:
The label associated with the edge removed.

### edgeCount

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

Specified by:
`edgeCount` in interface `Graph<V,E>`
Specified by:
`edgeCount` in class `GraphMatrix<V,E>`
Returns:
Number of edges in graph.

### edges

`public Iterator<Edge<V,E>> edges()`
Construct an traversal over all edges. edge is considered exactly once. Order is not guaranteed.

Specified by:
`edges` in interface `Graph<V,E>`
Specified by:
`edges` in class `GraphMatrix<V,E>`
Returns:
AbstractIterator over edges.

### toString

`public String toString()`
Construct a string representation of graph.

Overrides:
`toString` in class `Object`
Returns:
String representing graph.