tyrion

Dijkstra.java

Jun 5th, 2012
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.74 KB | None | 0 0
  1. import java.util.Arrays;
  2.  
  3. class Dijkstra {
  4.  
  5.     private final static double INF = Double.POSITIVE_INFINITY;
  6.  
  7.     // Time complexity: O(n²)
  8.     public static void dijkstra(double[][] C, double[] D, int[] pred, int s) {
  9.  
  10.         int n = D.length;
  11.  
  12.         boolean[] V = new boolean[n];
  13.  
  14.         V[s] = true;
  15.         C[s][s] = 0;
  16.  
  17.         for (int i = 0; i < n; i++) {
  18.             D[i] = C[s][i];
  19.             pred[i] = s;
  20.         }
  21.  
  22.         for (int i = 0; i < n - 1; i++) {
  23.        
  24.             int h = min(D, V);
  25.  
  26.             V[h] = true;
  27.             for (int k = 0; k < n; k++) {
  28.                 if (!V[k] && D[h] + C[h][k] < D[k]) {
  29.                     pred[k] = h;
  30.                     D[k] = D[h] + C[h][k];
  31.                 }
  32.             }
  33.         }
  34.  
  35.     }
  36.    
  37.  
  38.     private static int min(double[] D, boolean[] V) {
  39.         int k = 0, h = -1, n = D.length;
  40.  
  41.         for (; h == -1 && k < n; k++)
  42.             if (!V[k] && D[k] != INF)
  43.                 h = k;
  44.        
  45.         for (; k < n; k++)
  46.             if (!V[k] && D[k] != INF && D[k] < D[h])
  47.                 h = k;
  48.        
  49.         return h;
  50.     }
  51.  
  52.  
  53.     public static void main(String[] args) {
  54.  
  55.         int n = 6;
  56.         double[][] C = new double[n][n];
  57.  
  58.         for (double[] array : C)
  59.             for (int i = 0; i < n; i++)
  60.                 array[i] = INF;
  61.  
  62.         C[0][1] = 57;
  63.         C[0][2] = 12;
  64.         C[2][1] = 2;
  65.         C[1][3] = 24;
  66.         C[1][5] = 45;
  67.         C[2][4] = 6;
  68.         C[4][3] = 31;
  69.  
  70.         double[] D = new double[n];
  71.         int[] pred = new int[n];
  72.  
  73.         int s = 0;
  74.  
  75.         dijkstra(C, D, pred, s);
  76.  
  77.         System.out.println(Arrays.toString(D));
  78.         System.out.println(Arrays.toString(pred));
  79.     }
  80.  
  81. }
Advertisement
Add Comment
Please, Sign In to add comment