/** 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 H = new MinHeap(E, edgecnt, edgecnt); int numMST = G.n(); // Initially n classes for (int i=0; numMST>1; i++) { // Combine equiv classes KruskalElem temp = H.removemin(); // Next cheapest int v = temp.v1(); int u = temp.v2(); if (A.differ(v, u)) { // If in different classes A.UNION(v, u); // Combine equiv classes AddEdgetoMST(v, u); // Add this edge to MST numMST--; // One less MST } } } /** * 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 Graphl(); createGraph(f, G); Kruskal(G); assertEquals(out.toString(), "5 4 3 2 2 5 2 1 0 2 "); } }