Advertisement
lameski

nodedistance

Jan 24th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.55 KB | None | 0 0
  1. /*import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.StringTokenizer;
  4.  
  5. import java.util.NoSuchElementException;
  6.  
  7. class BNode<E> {
  8.  
  9. public E info;
  10. public BNode<E> left;
  11. public BNode<E> right;
  12.  
  13. static int LEFT = 1;
  14. static int RIGHT = 2;
  15.  
  16. public BNode(E info) {
  17. this.info = info;
  18. left = null;
  19. right = null;
  20. }
  21.  
  22. public BNode() {
  23. this.info = null;
  24. left = null;
  25. right = null;
  26. }
  27.  
  28. public BNode(E info, BNode<E> left, BNode<E> right) {
  29. this.info = info;
  30. this.left = left;
  31. this.right = right;
  32. }
  33.  
  34. @Override
  35. public String toString() {
  36. return ""+info;
  37. }
  38. }
  39.  
  40. class BTree<E> {
  41.  
  42. public BNode<E> root;
  43.  
  44. public BTree() {
  45. root = null;
  46. }
  47.  
  48. public BTree(E info) {
  49. root = new BNode<E>(info);
  50. }
  51.  
  52. public void makeRoot(E elem) {
  53. root = new BNode(elem);
  54. }
  55.  
  56. public void makeRootNode(BNode<E> node) {
  57. root = node;
  58. }
  59.  
  60. public BNode<E> addChild(BNode<E> node, int where, E elem) {
  61.  
  62. BNode<E> tmp = new BNode<E>(elem);
  63.  
  64. if (where == BNode.LEFT) {
  65. if (node.left != null) // veke postoi element
  66. return null;
  67. node.left = tmp;
  68. } else {
  69. if (node.right != null) // veke postoi element
  70. return null;
  71. node.right = tmp;
  72. }
  73.  
  74. return tmp;
  75. }
  76.  
  77. public BNode<E> addChildNode(BNode<E> node, int where, BNode<E> tmp) {
  78.  
  79. if (where == BNode.LEFT) {
  80. if (node.left != null) // veke postoi element
  81. return null;
  82. node.left = tmp;
  83. } else {
  84. if (node.right != null) // veke postoi element
  85. return null;
  86. node.right = tmp;
  87. }
  88.  
  89. return tmp;
  90. }
  91. public int najdiPat(BNode<String> from, BNode<String> to)
  92. {
  93. if(from.info.compareTo(to.info)==0)
  94. {
  95. return 0;
  96. }
  97.  
  98. ArrayStack<BNode<String>> stek= new ArrayStack<>(100);
  99. ArrayStack<Integer> stek2= new ArrayStack<>(100);
  100. while (true)
  101. {
  102. if (from!=null && from.info.compareTo(to.info)==0)
  103. {
  104. int zbir=0;
  105. while(!stek2.isEmpty())
  106. {
  107. zbir+=stek2.pop();
  108. }
  109. return zbir;
  110. }
  111. while(from!=null)
  112. {
  113. //System.out.println(from.info);
  114. stek.push(from);
  115. stek2.push(2);
  116. from=from.left;
  117. }
  118. int pom=0;
  119. while(!stek.isEmpty())
  120. {
  121. pom++;
  122. stek.pop();
  123. }
  124. //System.out.println(pom);
  125.  
  126. if(stek.isEmpty())
  127. return -1;
  128.  
  129. from=stek.peek();
  130.  
  131. stek.pop();
  132. stek2.pop();
  133. from=from.right;
  134. }
  135.  
  136.  
  137. }
  138.  
  139. }
  140.  
  141.  
  142.  
  143. interface Stack<E> {
  144.  
  145. // Elementi na stekot se objekti od proizvolen tip.
  146.  
  147. // Metodi za pristap:
  148.  
  149. public boolean isEmpty ();
  150. // Vrakja true ako i samo ako stekot e prazen.
  151.  
  152. public E peek ();
  153. // Go vrakja elementot na vrvot od stekot.
  154.  
  155. // Metodi za transformacija:
  156.  
  157. public void clear ();
  158. // Go prazni stekot.
  159.  
  160. public void push (E x);
  161. // Go dodava x na vrvot na stekot.
  162.  
  163. public E pop ();
  164. // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  165. }
  166.  
  167. class ArrayStack<E> implements Stack<E> {
  168. private E[] elems;
  169. private int depth;
  170.  
  171. @SuppressWarnings("unchecked")
  172. public ArrayStack (int maxDepth) {
  173. // Konstrukcija na nov, prazen stek.
  174. elems = (E[]) new Object[maxDepth];
  175. depth = 0;
  176. }
  177.  
  178.  
  179. public boolean isEmpty () {
  180. // Vrakja true ako i samo ako stekot e prazen.
  181. return (depth == 0);
  182. }
  183.  
  184.  
  185. public E peek () {
  186. // Go vrakja elementot na vrvot od stekot.
  187. if (depth == 0)
  188. throw new NoSuchElementException();
  189. return elems[depth-1];
  190. }
  191.  
  192.  
  193. public void clear () {
  194. // Go prazni stekot.
  195. for (int i = 0; i < depth; i++) elems[i] = null;
  196. depth = 0;
  197. }
  198.  
  199.  
  200. public void push (E x) {
  201. // Go dodava x na vrvot na stekot.
  202. elems[depth++] = x;
  203. }
  204.  
  205.  
  206. public E pop () {
  207. // Go otstranuva i vrakja elementot shto e na vrvot na stekot.
  208. if (depth == 0)
  209. throw new NoSuchElementException();
  210. E topmost = elems[--depth];
  211. elems[depth] = null;
  212. return topmost;
  213. }
  214.  
  215. }
  216.  
  217. public class NodeDistance {
  218.  
  219. public static void main(String[] args) throws Exception {
  220. int i, j, k;
  221. int index;
  222. String action;
  223.  
  224. String line;
  225.  
  226. BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  227. StringTokenizer st;
  228.  
  229. int N = Integer.parseInt(br.readLine());
  230.  
  231. BNode<String> nodes[] = new BNode[N];
  232. BTree<String> tree = new BTree<String>();
  233.  
  234. for (i=0;i<N;i++)
  235. nodes[i] = new BNode<String>();
  236.  
  237. for (i = 0; i < N; i++) {
  238. line = br.readLine();
  239. st = new StringTokenizer(line);
  240. index = Integer.parseInt(st.nextToken());
  241. nodes[index].info = st.nextToken();
  242. action = st.nextToken();
  243. if (action.equals("LEFT")) {
  244. tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.LEFT, nodes[index]);
  245. } else if (action.equals("RIGHT")) {
  246. tree.addChildNode(nodes[Integer.parseInt(st.nextToken())], BNode.RIGHT, nodes[index]);
  247. } else {
  248. // this node is the root
  249. tree.makeRootNode(nodes[index]);
  250. }
  251. }
  252.  
  253.  
  254. int cases = Integer.parseInt(br.readLine());
  255. for (i = 0; i < cases; i++) {
  256. String split[] = br.readLine().split(" +");
  257. String from = split[0];
  258. String to = split[1];
  259.  
  260. // Vasiot kod ovde
  261. BNode<String> FROM = new BNode(from);
  262. BNode<String> TO = new BNode(to);
  263. System.out.println(TO.info);
  264. if(tree.najdiPat(tree.root,TO)!=-1)
  265. {
  266. //System.out.println("ERROR");
  267. System.out.println(String.format("%d", tree.najdiPat(tree.root,TO)));
  268. //break;
  269. }
  270. else
  271. {
  272. System.out.println("ERROR");
  273. }
  274. }
  275. br.close();
  276.  
  277.  
  278. }
  279.  
  280. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement