Advertisement
Guest User

Untitled

a guest
Mar 21st, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.73 KB | None | 0 0
  1. import javafx.util.Pair;
  2. import java.util.Arrays;
  3. import java.util.LinkedList;
  4. import java.util.PriorityQueue;
  5. import java.util.Scanner;
  6.  
  7. public class Prim {
  8.  
  9.     int n;
  10.     LinkedList<Pair<Integer, Integer>> incList[];
  11.  
  12.  
  13.     private Prim(int n){
  14.         this.n = n;
  15.         incList = new LinkedList[n];
  16.  
  17.         for (int i = 0; i < n; i++){
  18.             incList[i] = new LinkedList<>();
  19.         }
  20.     }
  21.  
  22.     private void addEdge(int a, int b, int len){
  23.         Pair p1 = new Pair<>(b, len);
  24.         Pair p2 = new Pair<>(a, len);
  25.         incList[a].add(p1);
  26.         incList[b].add(p2);
  27.     }
  28.  
  29.  
  30.  
  31.     private void findShortestDist(){
  32.         int[] minDist = new int[n];
  33.         Arrays.fill(minDist, 100000000);
  34.         int[] next  = new int[n];
  35.         Arrays.fill(next, -1);
  36.         boolean[] used = new boolean[n];
  37.  
  38.         /*minDist[0] = 0;
  39.  
  40.         for (int i = 0; i < n; i++) {
  41.             int v = -1;
  42.             for (int j = 0; j < n; j++) {
  43.                 if (!used[j] && (v == -1 || minDist[j] < minDist[v])) {
  44.                     v = j;
  45.                 }
  46.             }
  47.             used[v] = true;
  48.             for (int j = 0; j < incList[v].size(); j++) {
  49.                 if (incList[v].get(j).getValue() < minDist[j]) {
  50.                     minDist[j] = incList[v].get(j).getValue();
  51.                     next[j] = v;
  52.                 }
  53.             }
  54.         }*/
  55.  
  56.  
  57.  
  58.         PriorityQueue<Para> q = new PriorityQueue<Para>();
  59.  
  60.         q.add(new Para(0, 0));
  61.  
  62.         for (int i = 0; i < n; i++){
  63.  
  64.  
  65.             int v = q.peek().getKey();
  66.             q.remove(q.peek());
  67.  
  68.             for (int j = 0; j < incList[v].size(); j++){
  69.                 int to = incList[v].get(j).getKey();
  70.                 int len = incList[v].get(j).getValue();
  71.                 if (len < minDist[to]){
  72.                     q.remove(new Para (to, minDist[to]));
  73.                     minDist[to] = len;
  74.                     next[to] = v;
  75.                     q.add(new Para (to, minDist[to]));
  76.                 }
  77.             }
  78.         }
  79.  
  80.  
  81.  
  82.         int ans = 0;
  83.         for (int i = 0; i < n; i++){
  84.             System.out.print(next[i] + " ");
  85.         }
  86.         System.out.println(" ");
  87.         for (int i =0 ; i < n - 1; i++) {
  88.             System.out.print(minDist[i]     + " ");
  89.             ans += minDist[i];
  90.         }
  91.         System.out.println(ans);
  92.     }
  93.  
  94.  
  95.     public static void main(String[] args){
  96.  
  97.         Scanner sc = new Scanner(System.in);
  98.  
  99.         int n = sc.nextInt();
  100.         int m = sc.nextInt();
  101.  
  102.         Prim graph = new Prim(n);
  103.  
  104.         for (int i = 0; i < m; i++){
  105.             graph.addEdge(sc.nextInt(), sc.nextInt(), sc.nextInt());
  106.         }
  107.  
  108.         graph.findShortestDist();
  109.     }
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement