Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- import javafx.util.*;
- import javax.swing.*;
- import java.io.*;
- public class Graph {
- // Граф хранится в виде списков смежности;
- ArrayList<ArrayList<AdjacentVertex>> graph = new ArrayList<>();
- void readGraph(){
- try{
- JFileChooser chooser = new JFileChooser();
- chooser.showOpenDialog(null);
- Scanner in = new Scanner(new FileReader(chooser.getSelectedFile()));
- int n = in.nextInt();
- for(int i = 0; i < n; i++)
- graph.add(new ArrayList<>());
- int m = in.nextInt();
- for (int i = 0; i < m; i++) {
- int v = in.nextInt();
- int u = in.nextInt();
- int weight = in.nextInt();
- graph.get(v).add(new AdjacentVertex(u, weight));
- graph.get(u).add(new AdjacentVertex(v, weight));
- }
- }catch(IOException ex){
- ex.printStackTrace();
- }
- }
- void primFindMST(){
- ArrayList<Integer> min_e = new ArrayList<>();
- ArrayList<Integer> sel_e = new ArrayList<>();
- for(int i = 0; i < graph.size(); i++) {
- min_e.add(Integer.MAX_VALUE);
- sel_e.add(-1);
- }
- min_e.set(0, 0);
- TreeSet<Pair<Integer, Integer>> q = new TreeSet<>();
- q.add(new Pair(0, 0));
- for(int i = 0; i < graph.size(); i++){
- if(q.isEmpty()) {
- System.out.println("No MST!");
- return;
- }
- int v = q.iterator().next().getValue();
- q.remove(q.iterator().next());
- if(sel_e.get(v) != -1)
- System.out.println("v " + sel_e.get(v));
- for(int j = 0; j < graph.get(v).size(); j++){
- int to = graph.get(v).get(j).adjacentVertex;
- int weight = graph.get(v).get(j).weight;
- if(weight < min_e.get(to)){
- if(q.contains(new Pair(min_e.get(to), to)))
- q.remove(new Pair(min_e.get(to), to));
- min_e.set(to, weight);
- sel_e.set(to, v);
- q.add(new Pair(min_e.get(to), to));
- }
- }
- }
- }
- class AdjacentVertex{
- int adjacentVertex;
- int weight;
- AdjacentVertex(int adjacentVertex, int weight){
- this.adjacentVertex = adjacentVertex;
- this.weight = weight;
- }
- }
- public static void main(String[] args){
- Graph g = new Graph();
- g.readGraph();
- g.primFindMST();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement