Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.50 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3.  
  4. public class HW3_2 {
  5.     /**
  6.      * Определяет путь между заданными двумя вершинами такой,
  7.      * что минимальный вес на ребрах этого пути максимален.
  8.      * <p>
  9.      * Реализован алгоритм Форда-Беллмана с динамикой,
  10.      * сложность которого O(V*E).
  11.      *
  12.      * @param from    Начальная вершина
  13.      * @param to      Конечная вершина
  14.      * @param matrix Матрица смежности, если ребро есть, то в ячейке (i, j) лежит вес ребра из i в j, иначе -1.
  15.      * @return Список вершин, составляющих такой путь (от начальной к конечной),
  16.      * или null, если такого пути нет.
  17.      */
  18.     public static ArrayList<Integer> FB(int from, int to, int[][] matrix) {
  19.         int n = matrix.length;
  20.         int[] d = new int[n];
  21.         int[] p = new int[n];
  22.         for (int i = 0; i < n; i++) {
  23.             d[i] = -1;
  24.             p[i] = -1;
  25.         }
  26.         d[from] = Integer.MAX_VALUE;
  27.  
  28.         for (int v = 0; v < n; v++) {
  29.             for (int u = 0; u < n; u++) {
  30.                 if (matrix[v][u] != -1 && d[u] < Math.min(d[v], matrix[v][u])) {
  31.                     d[u] = Math.min(d[v], matrix[v][u]);
  32.                     p[u] = v;
  33.                 }
  34.             }
  35.         }
  36.  
  37.         //Путь не найден
  38.         if (d[to] == -1) {
  39.             return null;
  40.         }
  41.  
  42.         ArrayList<Integer> path = new ArrayList<>();
  43.         path.add(to);
  44.         int cur = p[to];
  45.  
  46.         while (cur != -1) {
  47.             path.add(cur);
  48.             cur = p[cur];
  49.         }
  50.  
  51.         Collections.reverse(path);
  52.         return path;
  53.     }
  54.  
  55.     public static void main(String[] args) {
  56.         int n = 7;
  57.         int[][] matrix = new int[n][n];
  58.  
  59.         for(int i = 0; i < n; i++) {
  60.             for(int j = 0; j < n; j++) {
  61.                 matrix[i][j] = -1;
  62.             }
  63.         }
  64.  
  65.         matrix[0][1] = 5;
  66.         matrix[0][5] = 2;
  67.         matrix[1][2] = 1;
  68.         matrix[1][3] = 3;
  69.         matrix[2][4] = 6;
  70.         matrix[3][4] = 3;
  71.         matrix[5][6] = 3;
  72.         matrix[6][4] = 2;
  73.  
  74.         ArrayList<Integer> FB = FB(0, 4, matrix);
  75.        
  76.         System.out.println(FB == null ? "No path" : FB.toString());
  77.     }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement