Digraph.java
package cn.denghanxi.s42;
import edu.princeton.cs.algs4.Bag;
import edu.princeton.cs.algs4.In;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
public class Digraph {
private final int v;
private int e;
private Bag<Integer>[] adj;
public Digraph(int v) {
this.v = v;
this.e = 0;
adj = (Bag<Integer>[]) new Bag[v];
for (int i = 0; i < v; i++)
adj[i] = new Bag<>();
}
public Digraph(In in) {
try {
this.v = in.readInt();
if (this.v < 0) {
throw new IllegalArgumentException("Number of vertices in a Digraph must be nonnegative");
} else {
this.adj = (Bag[]) (new Bag[this.v]);
for (int i = 0; i < this.v; ++i) {
this.adj[i] = new Bag();
}
int E;
E = in.readInt();
if (E < 0) {
throw new IllegalArgumentException("Number of edges in a Digraph must be nonnegative");
} else {
for (int i = 0; i < E; ++i) {
int v = in.readInt();
int w = in.readInt();
this.addEdge(v, w);
}
}
}
} catch (NoSuchElementException var6) {
throw new InputMismatchException("Invalid input format in Digraph constructor");
}
}
public int v() {
return v;
}
public int e() {
return e;
}
public void addEdge(int v, int w) {
adj[v].add(w);
e++;
}
public Iterable<Integer> adj(int v) {
return adj[v];
}
public Digraph reverse() {
Digraph reverse = new Digraph(v);
for (int i = 0; i < v; i++)
for (int w : adj(i))
reverse.addEdge(w, i);
return reverse;
}
}