04.02.2018 Views

Algorithms

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

4.2 ■ Directed Graphs<br />

569<br />

Directed graph (digraph) data type<br />

public class Digraph<br />

{<br />

private final int V;<br />

private int E;<br />

private Bag[] adj;<br />

}<br />

public Digraph(int V)<br />

{<br />

this.V = V;<br />

this.E = 0;<br />

adj = (Bag[]) new Bag[V];<br />

for (int v = 0; v < V; v++)<br />

adj[v] = new Bag();<br />

}<br />

public int V() { return V; }<br />

public int E() { return E; }<br />

public void addEdge(int v, int w)<br />

{<br />

adj[v].add(w);<br />

E++;<br />

}<br />

public Iterable adj(int v)<br />

{ return adj[v]; }<br />

public Digraph reverse()<br />

{<br />

Digraph R = new Digraph(V);<br />

for (int v = 0; v < V; v++)<br />

for (int w : adj(v))<br />

R.addEdge(w, v);<br />

return R;<br />

}<br />

This Digraph data type is identical to Graph (page 526) except<br />

that addEdge() only calls add() once, and it has an<br />

instance method reverse() that returns a copy with all<br />

its edges reversed. Since the code is easily derived from the<br />

corresponding code for Graph, we omit the toString()<br />

method (see the table on page 523) and the input stream constructor<br />

from (see page 526).<br />

V<br />

tinyDG.txt<br />

13<br />

22<br />

4 2<br />

2 3<br />

3 2<br />

6 0<br />

0 1<br />

2 0<br />

11 12<br />

12 9<br />

9 10<br />

9 11<br />

8 9<br />

10 12<br />

11 4<br />

4 3<br />

3 5<br />

7 8<br />

8 7<br />

5 4<br />

0 5<br />

6 4<br />

6 9<br />

7 6<br />

0<br />

1<br />

2<br />

3<br />

4<br />

5<br />

6<br />

7<br />

8<br />

9<br />

10<br />

11<br />

12<br />

adj[]<br />

E<br />

5 1<br />

0 3<br />

5 2<br />

3 2<br />

4<br />

9 4 0<br />

6 8<br />

7 9<br />

11 10<br />

12<br />

4 12<br />

Digraph input format and<br />

adjacency-lists representation<br />

9

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!