Advertisement
Guest User

Untitled

a guest
Dec 14th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.27 KB | None | 0 0
  1.  
  2. import java.util.*;
  3.  
  4. public class Tanssiaiset {
  5.  
  6. public int n;
  7. public int m;
  8. public int onkoVierailtu;
  9. public int[][] verkkoJälkeen;
  10. public int[][] verkkoEnnen;
  11. ArrayList<Integer> polut;
  12.  
  13. public Tanssiaiset(int n, int m) {
  14. this.n = n;
  15. this.m = m;
  16. verkkoJälkeen = new int[n + 2][m + 2];
  17. verkkoEnnen = new int[n + 2][m + 2];
  18. onkoVierailtu = 1;
  19. polut = new ArrayList<>();
  20. }
  21.  
  22. public void lisaaPari(int a, int b) {
  23. verkkoJälkeen[a][b] += 1;
  24. verkkoJälkeen[0][a] += 1;
  25. verkkoJälkeen[b][n + 1] += 1;
  26.  
  27. verkkoEnnen[a][b] += 1;
  28. verkkoEnnen[0][a] += 1;
  29. verkkoEnnen[b][n + 1] += 1;
  30.  
  31. }
  32.  
  33. public int syvyyshaku(int[][] verkko, int[] vierailtu, int s, int t, int virta) {
  34. if (s == t) {
  35. //System.out.println("Päästiin maaliin! Virta: " + virta);
  36. return virta;
  37. }
  38.  
  39. int[] kaarenKapasiteetti = verkko[s];
  40. //System.out.println(Arrays.toString(kaarenKapasiteetti));
  41. vierailtu[s] = onkoVierailtu;
  42.  
  43. for (int i = 0; i < kaarenKapasiteetti.length; i++) {
  44. if (vierailtu[i] != onkoVierailtu && kaarenKapasiteetti[i] > 0) {
  45.  
  46. if (kaarenKapasiteetti[i] < virta) {
  47. virta = kaarenKapasiteetti[i];
  48. }
  49.  
  50. int virranMaara = syvyyshaku(verkko, vierailtu, i, t, virta);
  51. //System.out.println("Virtaa: " + virranMaara);
  52.  
  53. if (virranMaara > 0) {
  54. verkko[s][i] -= virranMaara;
  55. verkko[i][s] += virranMaara;
  56. //System.out.println("Päivitetään: ");
  57. //System.out.println(verkko[s][i]);
  58. //System.out.println(verkko[i][s]);
  59. polut.add(virranMaara);
  60. return virranMaara;
  61. }
  62. }
  63. }
  64. return 0;
  65. }
  66.  
  67. public int laske() {
  68. int[] vierailtu = new int[n * m + 2];
  69. int maksimivirtaus = 0;
  70.  
  71. while (true) {
  72. int virranMaara = syvyyshaku(verkkoJälkeen, vierailtu, 0, (n + 1), 99999999);
  73. onkoVierailtu++;
  74. //System.out.println(onkoVierailtu);
  75. maksimivirtaus += virranMaara;
  76.  
  77. if (virranMaara == 0) {
  78. return maksimivirtaus;
  79. }
  80. }
  81. }
  82.  
  83. public ArrayList<Pari> muodosta() {
  84. int maksimivirtaus = laske();
  85. System.out.println(maksimivirtaus);
  86.  
  87. System.out.println("Verkko ennen");
  88. System.out.println(Arrays.deepToString(verkkoEnnen).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
  89. System.out.println("_________");
  90. System.out.println("Verkko jälkeen");
  91. System.out.println(Arrays.deepToString(verkkoJälkeen).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));
  92.  
  93. return new ArrayList<>();
  94. }
  95.  
  96. }
  97.  
  98. public class Pari {
  99. int opiskelija1; // Kumpulan opiskelija
  100. int opiskelija2; // Viikin opiskelija
  101.  
  102. public Pari(int a, int b) {
  103. opiskelija1 = a;
  104. opiskelija2 = b;
  105. }
  106.  
  107. public String toString() {
  108. return "("+opiskelija1+","+opiskelija2+")";
  109. }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement