Advertisement
Guest User

Untitled

a guest
Nov 28th, 2014
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.51 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package sda;
  7.  
  8. import java.io.BufferedReader;
  9. import java.io.IOException;
  10. import java.io.InputStreamReader;
  11. import java.util.ArrayList;
  12. import java.util.Iterator;
  13. import java.util.List;
  14. import java.util.StringTokenizer;
  15.  
  16. /**
  17. * NPM :1406649132 Nama : Fahmi Azizi
  18. *
  19. * @author user
  20. */
  21. public class SDA1415T2 {
  22.  
  23. public static void main(String[] args) throws IOException {
  24. AnaryTree anary = new AnaryTree();
  25. BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
  26. int maxInput = Integer.parseInt(input.readLine());
  27.  
  28. for (int i = 0; i < maxInput; i++) {
  29. String line = input.readLine();
  30. StringTokenizer tokenizer = new StringTokenizer(line);
  31. if (tokenizer.hasMoreElements()) {
  32. if (line.toUpperCase().contains("TAMBAH")) {
  33. tokenizer.nextElement();
  34. String name = (String) tokenizer.nextElement();
  35. String phone = (String) tokenizer.nextElement();
  36. String regionalName = (String) tokenizer.nextElement();
  37. Node node = new Node(new Regional(name, phone), null);
  38. anary.insert(node, regionalName);
  39. } else if (line.toUpperCase().contains("HAPUS")) {
  40. tokenizer.nextElement();
  41. String regionalName = (String) tokenizer.nextElement();
  42. anary.remove(regionalName);
  43. } else if (line.toUpperCase().contains("TELEPON")) {
  44. tokenizer.nextElement();
  45. String regionalCaller = (String) tokenizer.nextElement();
  46. String regionalReceiver = (String) tokenizer.nextElement();
  47. anary.call(regionalCaller, regionalReceiver);
  48.  
  49. } else if (line.toUpperCase().contains("FIND")) {
  50. tokenizer.nextElement();
  51. String regionalName = (String) tokenizer.nextElement();
  52. Node a = anary.find(anary.root, regionalName);
  53. if (a == null) {
  54. System.out.println("Kantor tidak ketemu");
  55. } else {
  56. System.out.println("Kantor ketemu" + ((Regional) a.getParent().getElement()).getName());
  57. }
  58. } else {
  59. anary.display(anary.root);
  60. }
  61. }
  62. }
  63.  
  64. }
  65.  
  66. }
  67.  
  68. class Regional {
  69.  
  70. String name;
  71. String phone;
  72.  
  73. public Regional(String name, String phone) {
  74. this.name = name;
  75. this.phone = phone;
  76. }
  77.  
  78. public String getName() {
  79. return name;
  80. }
  81.  
  82. public void setName(String name) {
  83. this.name = name;
  84. }
  85.  
  86. public String getPhone() {
  87. return phone;
  88. }
  89.  
  90. public void setPhone(String phone) {
  91. this.phone = phone;
  92. }
  93.  
  94. }
  95.  
  96. class Node<T> {
  97.  
  98. private T element;
  99. private Node parent;
  100. private List<Node> listNode;
  101. private int level;
  102.  
  103. public Node(T element, Node parent) {
  104. this.element = element;
  105. this.parent = parent;
  106. listNode = new ArrayList<>();
  107. }
  108.  
  109. public Node(T element, Node parent, int level) {
  110. this.element = element;
  111. this.parent = parent;
  112. listNode = new ArrayList<>();
  113. this.level = level;
  114. }
  115.  
  116. public T getElement() {
  117. return element;
  118. }
  119.  
  120. public void setElement(T element) {
  121. this.element = element;
  122. }
  123.  
  124. public Node getParent() {
  125. return parent;
  126. }
  127.  
  128. public void setParent(Node parent) {
  129. this.parent = parent;
  130. }
  131.  
  132. public List<Node> getListNode() {
  133. return listNode;
  134. }
  135.  
  136. public int getLevel() {
  137. return level;
  138. }
  139.  
  140. public void setLevel(int level) {
  141. this.level = level;
  142. }
  143.  
  144. }
  145.  
  146. class AnaryTree<T> {
  147.  
  148. Node<T> root;
  149.  
  150. public AnaryTree() {
  151. this.root = null;
  152. }
  153.  
  154. void insert(Node node, String regionalName) {
  155. if (root == null) {
  156. node.setLevel(0);
  157. node.setParent(null);
  158. root = node;
  159. System.out.println("Kantor " + ((Regional) node.getElement()).getName() + " Berhasil dimasukkan");
  160. } else {
  161. if (((Regional) root.getElement()).getName().equals(regionalName)) {
  162. node.setLevel(root.getLevel() + 1);
  163. node.setParent(root);
  164. root.getListNode().add(node);
  165. System.out.println("Kantor " + ((Regional) node.getElement()).getName() + " Berhasil dimasukkan");
  166. } else {
  167. Node n = find(root, regionalName);
  168. if (n == null) {
  169. System.out.println("Kantor " + regionalName + " Tidak ditemukan");
  170. } else {
  171. node.setLevel(n.getLevel() + 1);
  172. node.setParent(n);
  173. n.getListNode().add(node);
  174. System.out.println("Kantor " + ((Regional) node.getElement()).getName() + " Berhasil dimasukkan");
  175. }
  176. }
  177. }
  178. }
  179.  
  180. Node find(Node node, String regionalName) {
  181. Node result = null;
  182. Iterator iterator = node.getListNode().iterator();
  183. while (iterator.hasNext()) {
  184. Node n = (Node) iterator.next();
  185. if (((Regional) n.getElement()).getName().equals(regionalName)) {
  186. result = n;
  187. if (result != null) {
  188. return result;
  189. }
  190. }
  191. if (n.getListNode().size() > 0) {
  192. result = find(n, regionalName);
  193. if (result != null) {
  194. return result;
  195. }
  196. }
  197. }
  198. return result;
  199. }
  200.  
  201. public void display(Node node) {
  202. Iterator iterator = node.getListNode().iterator();
  203. while (iterator.hasNext()) {
  204. Node n = (Node) iterator.next();
  205. if (n.getListNode().size() > 0) {
  206. display(n);
  207. }
  208. System.out.println(((Regional) n.getElement()).getName() + " - " + n.getLevel() + " - " + ((Regional) n.getParent().getElement()).getName());
  209.  
  210. }
  211. }
  212.  
  213. void remove(String regionalName) {
  214. Node node = find(root, regionalName);
  215. if (node == null) {
  216. System.out.println("Kantor " + regionalName + " Tidak ditemukan");
  217. return;
  218. } else {
  219. Node parent = node.getParent();
  220. if (parent != null) {
  221. if (node.getListNode().size() == 0) {
  222. parent.getListNode().remove(node);
  223. System.out.println("Hapus " + regionalName + " : Kantor " + regionalName + " Berhasil dihapus ");
  224. } else {
  225. List<Node> oldList = new ArrayList<>();
  226. oldList.addAll(node.getListNode());
  227. parent.getListNode().remove(node);
  228. System.out.println("Hapus " + regionalName + " : Kantor " + regionalName + " Berhasil dihapus ");
  229. Iterator iterator = oldList.iterator();
  230. while (iterator.hasNext()) {
  231. Node n = (Node) iterator.next();
  232. n.setLevel(n.getLevel() - 1);
  233. n.setParent(parent);
  234. System.out.println("Hapus " + regionalName + " : Kantor " + ((Regional) n.getElement()).getName() + " dipindahkan ");
  235. }
  236. parent.getListNode().addAll(oldList);
  237.  
  238. }
  239. }
  240.  
  241. }
  242. }
  243.  
  244. void call(String regionalCaller, String regionalReceiver) {
  245. Node caller, receiver;
  246. String rootRegional = ((Regional) root.getElement()).getName();
  247. List<Node> path1;
  248. List<Node> path2;
  249. if (rootRegional.equals(regionalCaller)) {
  250. caller = root;
  251. receiver = find(root, regionalReceiver);
  252. if (receiver != null) {
  253. path2 = generatePath(receiver);
  254.  
  255. if (path2.size() == 1) {
  256. String phone = ((Regional) path2.get(0).getElement()).getPhone();
  257. System.out.println("Telepon " + regionalCaller + " " + regionalReceiver + " : Nomor Telepon " + regionalReceiver + " adalah " + phone);
  258. } else {
  259. for (int i = path2.size() - 2; i >= 0; i--) {
  260. String phone = ((Regional) path2.get(i).getElement()).getPhone();
  261. if (i > 0) {
  262. String phoneDown = ((Regional) path2.get(i - 1).getElement()).getPhone();
  263. System.out.println("Telepon " + regionalCaller + " " + regionalReceiver + " : Telepon " + phone + " dapat " + phoneDown);
  264. } else {
  265. System.out.println("Telepon " + regionalCaller + " " + regionalReceiver + " : Nomor Telepon " + regionalReceiver + " adalah " + phone);
  266. }
  267. }
  268. }
  269. } else {
  270. System.out.println("Kantor " + regionalReceiver + " Tidak ditemukan ");
  271. }
  272.  
  273. } else if (rootRegional.equals(regionalReceiver)) {
  274. receiver = root;
  275. caller = find(root, regionalCaller);
  276. if (caller != null) {
  277. path1 = generatePath(caller);
  278. for (int i = 0; i < path1.size(); i++) {
  279. String phone = ((Regional) path1.get(i).getElement()).getPhone();
  280. if (path1.size() == 1) {
  281. System.out.println("Telepon " + regionalCaller + " " + regionalReceiver + " : Nomor Telepon " + regionalReceiver + " adalah " + phone);
  282. break;
  283. }
  284. if (i < path1.size() - 1) {
  285. String phoneParent = ((Regional) path1.get(i).getParent().getElement()).getPhone();
  286. System.out.println("Telepon " + regionalCaller + " " + regionalReceiver + " : Telepon " + phone + " dapat " + phoneParent);
  287. } else {
  288. System.out.println("Telepon " + regionalCaller + " " + regionalReceiver + " : Nomor Telepon " + regionalReceiver + " adalah " + phone);
  289. }
  290. }
  291.  
  292. } else {
  293. System.out.println("Kantor " + regionalCaller + " Tidak ditemukan ");
  294. }
  295. } else {
  296. caller = find(root, regionalCaller);
  297. receiver = find(root, regionalReceiver);
  298. if (receiver == null) {
  299. System.out.println("Kantor " + regionalCaller + " Tidak ditemukan ");
  300. } else if (caller == null) {
  301. System.out.println("Kantor " + regionalReceiver + " Tidak ditemukan ");
  302. } else {
  303. path1 = generatePath(caller);
  304. path2 = generatePath(receiver);
  305. if (isSamePath(path1, path2) > 0) {
  306. if(path1.size()>path2.size()){}
  307.  
  308. }
  309. }
  310. }
  311. }
  312.  
  313. int isSamePath(List<Node> path1, List<Node> path2) {
  314. int result = 0;
  315. if (path1.size() > path2.size()) {
  316. for (int i = 0; i < path2.size(); i++) {
  317. Node n1 = path2.get(i);
  318. Node n2 = path1.get(i);
  319. if (n1 == n2) {
  320. result = i;
  321. break;
  322. }
  323. }
  324. } else {
  325. for (int i = 0; i < path1.size(); i++) {
  326. Node n1 = path1.get(i);
  327. Node n2 = path2.get(i);
  328. if (n1 == n2) {
  329. result = i;
  330. break;
  331. }
  332. }
  333. }
  334. return result;
  335. }
  336.  
  337. void callDown(List<Node> path1, List<Node> path2) {
  338.  
  339. }
  340.  
  341. List<Node> generatePath(Node node) {
  342. List<Node> result = new ArrayList<>();
  343. //System.out.println("Pathnya " + ((Regional) node.getElement()).getName() + " :");
  344. while (node.getParent() != null) {
  345. result.add(node.getParent());
  346. node = node.getParent();
  347. //System.out.print(((Regional) node.getElement()).getName() + " - ");
  348. }
  349. //System.out.println("");
  350. return result;
  351. }
  352.  
  353. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement