Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.64 KB | None | 0 0
  1. import java.util.*;
  2. import javafx.util.*;
  3. import javax.swing.*;
  4. import java.io.*;
  5.  
  6. public class Graph {
  7.     // Граф хранится в виде списков смежности;
  8.     ArrayList<ArrayList<AdjacentVertex>> graph = new ArrayList<>();
  9.     void readGraph(){
  10.         try{
  11.             JFileChooser chooser = new JFileChooser();
  12.             chooser.showOpenDialog(null);
  13.             Scanner in = new Scanner(new FileReader(chooser.getSelectedFile()));
  14.             int n = in.nextInt();
  15.             for(int i = 0; i < n; i++)
  16.                 graph.add(new ArrayList<>());
  17.             int m = in.nextInt();
  18.             for (int i = 0; i < m; i++) {
  19.                 int v = in.nextInt();
  20.                 int u = in.nextInt();
  21.                 int weight = in.nextInt();
  22.                 graph.get(v).add(new AdjacentVertex(u, weight));
  23.                 graph.get(u).add(new AdjacentVertex(v, weight));
  24.             }
  25.         }catch(IOException ex){
  26.             ex.printStackTrace();
  27.         }
  28.     }
  29.     void primFindMST(){
  30.         ArrayList<Integer> min_e = new ArrayList<>();
  31.         ArrayList<Integer> sel_e = new ArrayList<>();
  32.         for(int i = 0; i < graph.size(); i++) {
  33.             min_e.add(Integer.MAX_VALUE);
  34.             sel_e.add(-1);
  35.         }
  36.         min_e.set(0, 0);
  37.         TreeSet<Pair<Integer, Integer>> q = new TreeSet<>();
  38.         q.add(new Pair(0, 0));
  39.         for(int i = 0; i < graph.size(); i++){
  40.             if(q.isEmpty()) {
  41.                 System.out.println("No MST!");
  42.                 return;
  43.             }
  44.             int v = q.iterator().next().getValue();
  45.             q.remove(q.iterator().next());
  46.  
  47.             if(sel_e.get(v) != -1)
  48.                 System.out.println("v " + sel_e.get(v));
  49.  
  50.             for(int j = 0; j < graph.get(v).size(); j++){
  51.                 int to = graph.get(v).get(j).adjacentVertex;
  52.                 int weight = graph.get(v).get(j).weight;
  53.                 if(weight < min_e.get(to)){
  54.                     if(q.contains(new Pair(min_e.get(to), to)))
  55.                         q.remove(new Pair(min_e.get(to), to));
  56.                     min_e.set(to, weight);
  57.                     sel_e.set(to, v);
  58.                     q.add(new Pair(min_e.get(to), to));
  59.                 }
  60.             }
  61.         }
  62.     }
  63.     class AdjacentVertex{
  64.         int adjacentVertex;
  65.         int weight;
  66.         AdjacentVertex(int adjacentVertex, int weight){
  67.             this.adjacentVertex = adjacentVertex;
  68.             this.weight = weight;
  69.         }
  70.     }
  71.  
  72.     public static void main(String[] args){
  73.         Graph g = new Graph();
  74.         g.readGraph();
  75.         g.primFindMST();
  76.     }
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement