import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Wheels { public class Wheel{ int x,y,radius; int index; String direction; boolean visited; String ratio; ArrayList adjacent = new ArrayList(); int connected; } Wheel[] wdata; /* * wdata[0] is the array of circles adjacent to circle 0 */ public ArrayList adjacentTo(int i){ return wdata[i].adjacent; } private void findAdjacent(int k, Wheel[] wa){ for(int j=k+1;j wak = wa[k].adjacent; wak.add(j); wa[k].adjacent = wak; ArrayList waj = wa[j].adjacent; waj.add(k); wa[j].adjacent = waj; } } } private void populate(String[] toPop){ wdata = new Wheel[toPop.length]; for(int i = 0; i0;i--){ if(num%i == 0 && den%i == 0){ return i; } } return 1; } private String findRatio(String curRatio, int radius1,int radius2){ if(curRatio.contains("/")){ String[] parts = curRatio.split("/"); int numerator = Integer.parseInt(parts[0]); int denom = Integer.parseInt(parts[1]); numerator = numerator * radius1; denom = denom*radius2; if(numerator%denom==0){ int ans = numerator/denom; return Integer.toString(ans); } else{ int gcd = GCD(numerator, denom); numerator = numerator/gcd; denom = denom/gcd; return Integer.toString(numerator)+"/"+Integer.toString(denom); } } else{ int cur = Integer.parseInt(curRatio); radius1 = radius1 * cur; if(radius1%radius2==0){ return Integer.toString(radius1/radius2); } else{ int gcd = GCD(radius1,radius2); radius1= radius1/gcd; radius2 = radius2/gcd; return Integer.toString(radius1) + "/" + Integer.toString(radius2); } } } private void check(Wheel[] data){ Queue toDo = new LinkedList(); toDo.add(wdata[0]); wdata[0].direction = "clockwise"; wdata[0].ratio = "1"; ArrayList visited = new ArrayList(); visited.add(wdata[0]); while(!toDo.isEmpty()){ Wheel cur = toDo.remove(); for(int i : cur.adjacent){ if(!visited.contains(wdata[i])){ visited.add(wdata[i]); toDo.add(wdata[i]); if(cur.direction.equals("clockwise")){ wdata[i].direction = "counterclockwise"; } else{ wdata[i].direction = "clockwise"; } wdata[i].connected = cur.index; wdata[i].ratio = findRatio(cur.ratio,cur.radius,wdata[i].radius); } } } } private void print(String[] wheels){ for(int i = 0;i