gon2

GraphProperties.java

Apr 3rd, 2018
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.79 KB | None | 0 0
  1. package heima10;
  2.  
  3. import edu.princeton.cs.algs4.Graph;
  4. import edu.princeton.cs.algs4.SymbolGraph;
  5. import edu.princeton.cs.algs4.StdOut;
  6. import edu.princeton.cs.algs4.BreadthFirstPaths;
  7.  
  8. public class GraphProperties {
  9.  
  10.     private Graph g;
  11.     // fjöldi hnúta í grafinu
  12.     private int fjoldi;
  13.     // allar stystu leiðir fyrir hvern hnút
  14.     private int[] ecc;
  15.  
  16.     GraphProperties(Graph g) {
  17.         /*
  18.         Upphafsstillir klasa sem reiknar út nokkra eiginleika netsins <g>.
  19.         Netið <g> skal vera samanhangandi. Þessi aðferð veldur villu sé svo ekki.
  20.          */
  21.  
  22.         // Hér þarf að skrifa kóða!
  23.         this.g = g;
  24.         fjoldi = g.V();
  25.         ecc = new int[fjoldi];
  26.         // finnum stystu leiðirnar:
  27.         for (int i=0; i<fjoldi; i++) {
  28.             ecc[i] = eccentricity(i);
  29.         }
  30.     }
  31.  
  32.     public int eccentricity(int v) {
  33.         /*
  34.         Skilar lengd stystu leiðar frá hnútnum <v> í <this.g> til þess hnúts sem lengst er frá honum.
  35.          */
  36.        
  37.         int max = 0;    
  38.         // finnur styrstu leið fŕá völdum hnúti til allra annarra hnúta í grafinu
  39.         BreadthFirstPaths bfp = new BreadthFirstPaths(g, v);
  40.  
  41.         for (int i=0; i<fjoldi; i++) {
  42.             // tékkum hvort það sé til leið
  43.             if (bfp.hasPathTo(i)) {
  44.                 // ef lengsta leiðin hingað til
  45.                 if (bfp.distTo(i) > max) max = bfp.distTo(i);
  46.             }
  47.         }
  48.         // skilum lengstu leiðinni
  49.         return max;
  50.     }
  51.  
  52.     public int diameter() {
  53.         /*
  54.         Skilar hæsta eccentricity meðal allra hnúta í <this.g>.
  55.          */
  56.        
  57.         int max = Integer.MIN_VALUE;
  58.         // finnum hæsta gildið í eccentricity fylkinu okkar
  59.         for (int i : ecc) {
  60.             if (i > max) max = i;
  61.         }      
  62.         return max;
  63.     }
  64.  
  65.     public int radius() {
  66.         /*
  67.         Skilar lægsta eccentricity meðal allra hnúta í <this.g>.
  68.          */
  69.        
  70.         int min = Integer.MAX_VALUE;
  71.         // finnum hæsta gildið í eccentricity fylkinu okkar
  72.         for (int i : ecc) {
  73.             if (i < min) min = i;
  74.         }      
  75.         return min;
  76.     }
  77.  
  78.     public int center() {
  79.         /*
  80.         Skilar númeri hnúts í <this.g> sem hefur eccentricity = this.radius().
  81.          */
  82.        
  83.         int center = -1;
  84.         int r = this.radius();
  85.         // finnum nr hnútsins
  86.         for (int i : ecc) {
  87.             if (i == r) {
  88.                 center = i;
  89.                 break;
  90.             }
  91.         }
  92.         return center;
  93.     }
  94.  
  95.     public static void main(String[] args) {
  96.         SymbolGraph sg = new SymbolGraph("heima10/routes.txt", " ");
  97.         GraphProperties gp = new GraphProperties(sg.graph());
  98.  
  99.         StdOut.println("Eiginleikar leiðanetsins:");
  100.         StdOut.println("");
  101.         StdOut.println("Þvermál:   " + gp.diameter());
  102.         StdOut.println("Radíus:    " + gp.radius());
  103.         StdOut.println("Miðhnútur: " + sg.nameOf(gp.center()));
  104.         StdOut.println("");
  105.         StdOut.println(" Völlur frávik ");
  106.         StdOut.println("===============");
  107.         for (int v = 0; v < sg.graph().V(); v++) {
  108.             StdOut.println(String.format("  %-5s   %-4d", sg.nameOf(v), gp.eccentricity(v)));
  109.         }
  110.     }
  111.  
  112. }
Advertisement
Add Comment
Please, Sign In to add comment