Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- /**
- * Created by Justin on 11/23/17.
- */
- public class Driver1 {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- HashMap<String, ArrayList<String>> h1 = new HashMap<>();
- boolean b = true;
- while(b) {
- String s = sc.nextLine();
- if(!s.equals("")) {
- String[] s1 = s.split(" -> ");
- String s2 = s1[1];
- String[] s3 = s2.split(",");
- ArrayList<String> a1 = new ArrayList<>();
- for(String s4 : s3) {
- a1.add(s4);
- }
- h1.put(s1[0], a1);
- }
- else {
- b = false;
- }
- }
- String printThis = "";
- String s = path(h1);
- //System.out.println("hitting this");
- String[] s1 = s.split("->");
- for(int i = 0; i < s1.length; i++) {
- if(i==0) {
- printThis += s1[i];
- }
- else {
- printThis += s1[i].substring(s1[i].length() - 1, s1[i].length());
- }
- }
- System.out.println(printThis);
- }
- static String path(HashMap<String, ArrayList<String>> h1) {
- HashMap<String,Integer> h2 = new HashMap<>();
- Set<String> s1 = h1.keySet();
- Iterator itr = s1.iterator();
- while(itr.hasNext()) {
- String key = (String) itr.next();
- ArrayList<String> temp = h1.get(key);
- for(String i : temp) {
- h2.put(i,0);
- }
- h2.put(key,0);
- }
- //System.out.println(h2.toString());
- Set<String> s2 = h1.keySet();
- Iterator itr1 = s2.iterator();
- while(itr1.hasNext()) {
- String key = (String) itr1.next();
- //System.out.println("key: " + key);
- int change = h2.get(key);
- ArrayList<String> temp = h1.get(key);
- //System.out.println("Value: " + temp.toString());
- h2.replace(key,change+(temp.size()*-1));
- for(String i : temp) {
- int change2 = h2.get(i);
- h2.replace(i,change2+1);
- }
- }
- Set<String> s3 = h2.keySet();
- Iterator itr2 = s3.iterator();
- String start = "";
- String end = "";
- while(itr2.hasNext()) {
- String key = (String)itr2.next();
- if(h2.get(key) < 0) {
- end = key;
- }
- else if(h2.get(key) > 0) {
- start = key;
- }
- }
- ArrayList<String> addThis;
- if (h1.containsKey(start)) {
- addThis = h1.get(start);
- }
- else {
- addThis = new ArrayList<>();
- }
- addThis.add(end);
- h1.put(start,addThis);
- //System.out.println(start + " " + end);
- //System.out.println();
- //System.out.println(end);
- //System.out.println(start);
- ArrayList<String> xd = giveCycle(h1);
- xd.remove(xd.size() - 1);
- while(!(xd.get(xd.size()-1).equals(start)) || !(xd.get(0).equals(end))) {
- xd.add(0,xd.remove(xd.size()-1));
- }
- String pThis = "";
- for(String s : xd) {
- String add = s + "";
- pThis += add + "->";
- }
- return pThis.substring(0,pThis.length()-2);
- }
- static ArrayList<String> giveCycle(HashMap<String, ArrayList<String>> h1) {
- Set<String> s1 = h1.keySet();
- Iterator itr = s1.iterator();
- ArrayList<String> a1 = new ArrayList<>();
- //int counter = 1;
- String addThis = (String)itr.next();
- a1.add(addThis);
- a1.add(h1.get(addThis).get(0));
- if(h1.get(addThis).size() == 1) {
- h1.remove(addThis);
- }
- else {
- ArrayList<String> temp = h1.get(addThis);
- temp.remove(0);
- h1.replace(addThis,temp);
- }
- while(!h1.isEmpty()) {
- //System.out.println("hitthis3");
- if (h1.containsKey(a1.get(a1.size()-1))) {
- //System.out.println("hitthis1");
- String key = a1.get(a1.size()-1);
- String addPls = h1.get(a1.get(a1.size()-1)).get(0);
- a1.add(addPls);
- if(h1.get(key).size() == 1) {
- h1.remove(key);
- }
- else {
- ArrayList<String> temp = h1.get(key);
- temp.remove(0);
- h1.replace(key,temp);
- }
- }
- else {
- //System.out.println("hitthis2");
- int saveNum = 0;
- //int cur = 0;
- ArrayList<String> replace = new ArrayList<>();
- for(int i = 0; i < a1.size(); i++) {
- if(h1.containsKey(a1.get(i))) {
- saveNum = i;
- //cur = a1.get(i);
- break;
- }
- }
- for(int j = saveNum; j < a1.size(); j++) {
- replace.add(a1.get(j));
- }
- for(int k = 1; k <= saveNum; k++) {
- replace.add(a1.get(k));
- }
- a1 = replace;
- }
- //System.out.println(a1.toString());
- }
- //System.out.println("hitthis4");
- return a1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement