/** Source code example for "A Practical Introduction to Data Structures and Algorithm Analysis, 3rd Edition (Java)" by Clifford A. Shaffer Copyright 2008-2011 by Clifford A. Shaffer */ // Graph operation main function. // To use: java -ea GraphTest import java.io.*; import java.util.*; public class GraphTest extends junit.framework.TestCase { static final int UNVISITED = 0; static final int VISITED = 1; // Create a graph from file static Graph createGraph(BufferedReader file, Graph G) throws IOException { String line = null; StringTokenizer token; boolean undirected = false; int i, v1, v2, weight; assert (line = file.readLine()) != null : "Unable to read number of vertices"; while(line.charAt(0) == '#') assert (line = file.readLine()) != null : "Unable to read number of vertices"; token = new StringTokenizer(line); int n = Integer.parseInt(token.nextToken()); G.Init(n); for (i=0; i Q = new AQueue(G.n()); int[] Count = new int[G.n()]; int v; for (v=0; v 0) { // Process the vertices v = Q.dequeue().intValue(); printout(v); // PreVisit for Vertex V for (int w = G.first(v); w < G.n(); w = G.next(v, w)) { Count[w]--; // One less prerequisite if (Count[w] == 0) // This vertex is now free Q.enqueue(w); } } } /** * This method is automatically called once before each test case * method, so that all the variables are cleanly initialized for * each test. */ public void setUp() { out = new StringBuffer(100); } public void testGraph() throws IOException { BufferedReader f; f = new BufferedReader(new InputStreamReader(new FileInputStream("testfile.gph"))); Graph G = new Graphm(); createGraph(f, G); topsort(G); assertEquals(out.toString(), "0 1 2 5 3 4 6 "); } }