Advertisement
Guest User

Untitled

a guest
Nov 24th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.50 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. /**
  4. * Created by Justin on 11/23/17.
  5. */
  6. public class Driver1 {
  7. public static void main(String[] args) {
  8. Scanner sc = new Scanner(System.in);
  9. HashMap<String, ArrayList<String>> h1 = new HashMap<>();
  10.  
  11. boolean b = true;
  12. while(b) {
  13. String s = sc.nextLine();
  14. if(!s.equals("")) {
  15. String[] s1 = s.split(" -> ");
  16. String s2 = s1[1];
  17. String[] s3 = s2.split(",");
  18. ArrayList<String> a1 = new ArrayList<>();
  19. for(String s4 : s3) {
  20. a1.add(s4);
  21. }
  22. h1.put(s1[0], a1);
  23. }
  24. else {
  25. b = false;
  26. }
  27. }
  28. String printThis = "";
  29. String s = path(h1);
  30. //System.out.println("hitting this");
  31. String[] s1 = s.split("->");
  32. for(int i = 0; i < s1.length; i++) {
  33. if(i==0) {
  34. printThis += s1[i];
  35. }
  36. else {
  37. printThis += s1[i].substring(s1[i].length() - 1, s1[i].length());
  38. }
  39. }
  40. System.out.println(printThis);
  41. }
  42.  
  43. static String path(HashMap<String, ArrayList<String>> h1) {
  44. HashMap<String,Integer> h2 = new HashMap<>();
  45.  
  46. Set<String> s1 = h1.keySet();
  47. Iterator itr = s1.iterator();
  48. while(itr.hasNext()) {
  49. String key = (String) itr.next();
  50. ArrayList<String> temp = h1.get(key);
  51. for(String i : temp) {
  52. h2.put(i,0);
  53. }
  54. h2.put(key,0);
  55. }
  56.  
  57. //System.out.println(h2.toString());
  58.  
  59. Set<String> s2 = h1.keySet();
  60. Iterator itr1 = s2.iterator();
  61. while(itr1.hasNext()) {
  62. String key = (String) itr1.next();
  63. //System.out.println("key: " + key);
  64. int change = h2.get(key);
  65. ArrayList<String> temp = h1.get(key);
  66. //System.out.println("Value: " + temp.toString());
  67. h2.replace(key,change+(temp.size()*-1));
  68. for(String i : temp) {
  69. int change2 = h2.get(i);
  70. h2.replace(i,change2+1);
  71. }
  72.  
  73. }
  74.  
  75. Set<String> s3 = h2.keySet();
  76. Iterator itr2 = s3.iterator();
  77. String start = "";
  78. String end = "";
  79. while(itr2.hasNext()) {
  80. String key = (String)itr2.next();
  81. if(h2.get(key) < 0) {
  82. end = key;
  83. }
  84. else if(h2.get(key) > 0) {
  85. start = key;
  86. }
  87. }
  88.  
  89. ArrayList<String> addThis;
  90. if (h1.containsKey(start)) {
  91. addThis = h1.get(start);
  92. }
  93. else {
  94. addThis = new ArrayList<>();
  95. }
  96. addThis.add(end);
  97. h1.put(start,addThis);
  98.  
  99. //System.out.println(start + " " + end);
  100. //System.out.println();
  101. //System.out.println(end);
  102. //System.out.println(start);
  103. ArrayList<String> xd = giveCycle(h1);
  104. xd.remove(xd.size() - 1);
  105. while(!(xd.get(xd.size()-1).equals(start)) || !(xd.get(0).equals(end))) {
  106. xd.add(0,xd.remove(xd.size()-1));
  107. }
  108.  
  109. String pThis = "";
  110. for(String s : xd) {
  111. String add = s + "";
  112. pThis += add + "->";
  113. }
  114.  
  115. return pThis.substring(0,pThis.length()-2);
  116.  
  117. }
  118.  
  119. static ArrayList<String> giveCycle(HashMap<String, ArrayList<String>> h1) {
  120. Set<String> s1 = h1.keySet();
  121. Iterator itr = s1.iterator();
  122. ArrayList<String> a1 = new ArrayList<>();
  123. //int counter = 1;
  124. String addThis = (String)itr.next();
  125. a1.add(addThis);
  126. a1.add(h1.get(addThis).get(0));
  127. if(h1.get(addThis).size() == 1) {
  128. h1.remove(addThis);
  129. }
  130. else {
  131. ArrayList<String> temp = h1.get(addThis);
  132. temp.remove(0);
  133. h1.replace(addThis,temp);
  134. }
  135. while(!h1.isEmpty()) {
  136. //System.out.println("hitthis3");
  137. if (h1.containsKey(a1.get(a1.size()-1))) {
  138. //System.out.println("hitthis1");
  139. String key = a1.get(a1.size()-1);
  140. String addPls = h1.get(a1.get(a1.size()-1)).get(0);
  141. a1.add(addPls);
  142. if(h1.get(key).size() == 1) {
  143. h1.remove(key);
  144. }
  145. else {
  146. ArrayList<String> temp = h1.get(key);
  147. temp.remove(0);
  148. h1.replace(key,temp);
  149. }
  150. }
  151. else {
  152. //System.out.println("hitthis2");
  153. int saveNum = 0;
  154. //int cur = 0;
  155. ArrayList<String> replace = new ArrayList<>();
  156. for(int i = 0; i < a1.size(); i++) {
  157. if(h1.containsKey(a1.get(i))) {
  158. saveNum = i;
  159. //cur = a1.get(i);
  160. break;
  161. }
  162. }
  163. for(int j = saveNum; j < a1.size(); j++) {
  164. replace.add(a1.get(j));
  165. }
  166. for(int k = 1; k <= saveNum; k++) {
  167. replace.add(a1.get(k));
  168. }
  169. a1 = replace;
  170. }
  171.  
  172. //System.out.println(a1.toString());
  173. }
  174. //System.out.println("hitthis4");
  175. return a1;
  176. }
  177.  
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement