CS 100: Section Assignment S11

Solutions


Problem 1.

import java.io.*;
import java.awt.*;

public class PointsInPlane extends Frame
{
    public void paint(Graphics g)
	{
	    g.fillRect(0,0,1000,1000);
	    int[] h0 = { 100, 450, 200, 300, 400, 650, 500, 850, 150, 150};
	    int[] v0 = { 400, 100, 250, 500, 350, 250, 100, 300, 200, 400};
	    double[][] D = distTable(h0,v0);
	
	// ****************************************************************
	    double dMax = D[0][1];
	    int iBest = 0;
	    int jBest = 1;
	    for (int i=0;i < D.length;i++)
	       for (int j=i+1;j < D.length;j++)
	          {
	             if (D[i][j]>dMax)
	             {
	                dMax = D[i][j];
	                iBest = i;
	                jBest = j;
	             }
	           }
	    showCities(g,h0,v0);
	    g.setColor(Color.cyan);
	    g.drawLine(h0[iBest],v0[iBest],h0[jBest],v0[jBest]);
	// ****************************************************************
	   
	}



Problem 2

// ****************************************************************
	    
	    int[] pi;        // The i-th path and
	    double di;       // its length.
	    int[] pBest;     // The best path examined "so far" and
	    double dMin;     // its length.
	    
	    pBest = findPath(D,0);
	    dMin = roundtrip(D,pBest); //
	    
	    for (int i=1;i < D.length;i++)
	    {
	       // Examine the roundtrip starting at the i-th city.
	       pi = findPath(D,i);
	       di = roundtrip(D,pi);
	       if (di < dMin)
	       {
	          dMin = di;
	          for(int k=0;k < D.length;k++)
	             pBest[k] = pi[k];
	       }
	          
	    }
	    showPath(g,h0,v0,pBest);
	    showCities(g,h0,v0);
	   
	// ****************************************************************
	   

Problem 3

	public static double roundtrip(double[][] D, int[] path)
	// D is an n-by-n pairwise distance array and path is a length n itinerary
	// array. Yields the roundtrip distance of the trip defined by path.
	{
	   double odometer = 0;
	   int a,b; // Index of the current city and the next city respectively.
	   for(int i=0;i < path.length;i++)
	   {
	      a = path[i];
	      if (i==path.length-1)
	         b = path[0];
	      else
	         b = path[i+1];
	      odometer = odometer + D[a][b];
	   }
	   return odometer;
	}
 

Problem 4

// ****************************************************************
	    int jBest;
	    double dMin;
	    g.setColor(Color.cyan);
	    for (int i=0;i < D.length;i++)
	    {
	       // Connect the ith point to its nearest neighbor.
	       // Look for the smallest value in D's i-th row excluding D[i][i].
	       if (i==0)
	       {
	          jBest = 1;
	          dMin = D[0][1];
	       }
	       else
	       {
	          jBest = 0;
	          dMin = D[i][0];
	       }
	       for(int j=0;j < D.length;j++)
	          if(j!=i && D[i][j] < dMin)
	          {
	             jBest = j;
	             dMin = D[i][j];
	          }
	       g.drawLine(h0[i],v0[i],h0[jBest],v0[jBest]);
	    }
	    showCities(g,h0,v0);
	   
	// ****************************************************************