Distance Chart
Page 183 from the text has the starter code for DistanceChart
.
Exercises
- make Constructors for the
DistanceChart
class - Implement
findNearestCity
- Make a tester class and use the information from the example on page 182.
- complete part(a) and part (b)
If you don't have enough time to make your own tester, here is one I made:
import java.util.*; public class DistanceChartTester { public static void main(String[] args) { ArrayList<String> names = new ArrayList<String>(); names.add("Atlanta"); names.add("Boston"); names.add("Cleveland"); names.add("Dallas"); names.add("Washington"); int[][] dist = new int[names.size()][names.size()]; for (int i=0; i< names.size(); i++) { dist[i][i]=0; } dist[0][1]=936; dist[0][2]=550; dist[1][2]=554; dist[0][3]=719; dist[1][3]=1547; dist[2][3]=1018; dist[0][4]=540; dist[1][4]=396; dist[2][4]=309; dist[3][4]=1181; for(int i=0; i<names.size(); i++) for(int j=0; j< names.size(); j++) dist[j][i]=dist[i][j]; //Print the distance table System.out.println("\nDistance Table is:"); for(int i=0; i<names.size(); i++){ System.out.format("%-12s",names.get(i)); for(int j=0; j< names.size(); j++){ System.out.format("%6d",dist[i][j]); } System.out.println(); } DistanceChart dc = new DistanceChart(names, dist); List<String> itinerary = dc.makeItinerary(); System.out.println("\nComputed Itinerary is:"); for(int i=0; i< itinerary.size(); i++){ System.out.format("%2d. %-12s\n",i+1,itinerary.get(i)); } System.out.println("\nExpected\n 1. Dallas\n 2. Atlanta\n 3. Washington\n 4. Cleveland\n 5. Boston"); } }
If you just have time only for part (a) and part (b), here is one way you can implement the findNearestCity
method:
public int findNearestCity(int i, boolean[] visited) { //not shown //find index of first city not visited: int start=0; while (start < visited.length && visited[start]) start++; int min=distances[i][start]; int minIndex=start; for(int j=start+1; j< visited.length; j++) { if (!visited[j] && distances[i][j] < min){ min=distances[i][j]; minIndex=j; } } return minIndex; }