Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. package net.mrpaul.XA270.greedy;
  2.  
  3. import java.io.*;
  4. import java.util.*;
  5.  
  6. public class Kruskals {
  7. private static final Comparator<List<Integer>> C = new Comparator<List<Integer>>() {
  8. public int compare(List<Integer> pList1, List<Integer> pList2) {
  9. return pList1.get(0).compareTo(pList2.get(0));
  10. }
  11. };
  12.  
  13. public static void main(String args[]) throws IOException {
  14. kruskals("in.txt");
  15. }
  16.  
  17. public static void kruskals(String fileName) throws IOException {
  18. Scanner scan = new Scanner(new File(fileName));
  19. int n = Integer.parseInt(scan.nextLine());
  20. StringTokenizer tokenizer;
  21.  
  22. List<List<Integer>> Q = new ArrayList<List<Integer>>();
  23. List<List<Integer>> E = new ArrayList<List<Integer>>();
  24. int token;
  25. List<Integer> e;
  26. for (int i=0; i<n; i++) {
  27. Q.add(new ArrayList<Integer>());
  28. tokenizer = new StringTokenizer(scan.nextLine());
  29. for (int j=0; j<n; j++) {
  30. token = Integer.parseInt(tokenizer.nextToken());
  31. Q.get(i).add(token);
  32. if (token != -1) {
  33. e = new ArrayList<Integer>();
  34. e.add(token);
  35. e.add(i);
  36. e.add(j);
  37. E.add(e);
  38. }
  39. }
  40. }
  41. Collections.sort(E, C);
  42.  
  43. UF U = new UF(n);
  44.  
  45. List<List<Integer>> O = new ArrayList<List<Integer>>();
  46. for (int i=0; i<n; i++) {
  47. O.add(new ArrayList<Integer>());
  48. for (int j=0; j<n; j++) {
  49. O.get(i).add(-1);
  50. }
  51. }
  52.  
  53. int s;
  54. int f;
  55. int sum = 0;
  56. while (U.count() > 1) {
  57. e = E.get(0);
  58. E.remove(0);
  59. s = e.get(1);
  60. f = e.get(2);
  61. if (!U.connected(s, f)) {
  62. U.union(s, f);
  63. O.get(s).set(f, e.get(0));
  64. O.get(f).set(s, e.get(0));
  65. sum += e.get(0);
  66. }
  67. }
  68.  
  69. String o = "";
  70. for (int i=0; i<n; i++) {
  71. for (int j=0; j<n; j++) {
  72. o += O.get(i).get(j)+" ";
  73. }
  74. o += "\n";
  75. }
  76. o += sum;
  77.  
  78. BufferedWriter out = new BufferedWriter(new FileWriter("out.txt"));
  79. out.write(o);
  80. out.close();
  81. }
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement