Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package weblab;
- import java.io.*;
- import java.util.*;
- class Node {
- List<Node> outgoingEdges;
- boolean marked;
- public Node() {
- this.outgoingEdges = new ArrayList<>();
- this.marked = false;
- }
- }
- class Solution {
- // Implement the solve method to return the answer to the problem posed by the inputstream.
- public static String run(InputStream in) {
- return new Solution().solve(in);
- }
- public String solve(InputStream in) {
- // TODO
- Scanner sc = new Scanner(in);
- String line1 = sc.nextLine();
- Scanner sn = new Scanner(line1);
- sn.useDelimiter("\\s+");
- int n = sn.nextInt();
- int m = sn.nextInt();
- int s = sn.nextInt();
- int t = sn.nextInt();
- sn.close();
- if(m < 0) { sc.close(); return "no"; }
- System.out.println("\n" + "n is " + n);
- List<Node> all = new ArrayList<>();
- //make nodes 1 to n
- for(int i = 0; i < n; i++) {
- Node node = new Node();
- all.add(node);
- }
- // System.out.println("all size is " + all.size());
- while(sc.hasNextLine()) {
- String line = sc.nextLine();
- Scanner se = new Scanner(line);
- se.useDelimiter("\\s+");
- //get the numbers from se
- int index = se.nextInt();
- int direction = se.nextInt();
- int length = se.nextInt(); //not needed/used here
- if(length < 0) { }
- Node curr = all.get(index - 1);
- Node dir = all.get(direction - 1);
- curr.outgoingEdges.add(dir);
- //close scanner
- se.close();
- }
- //close scanners
- sc.close();
- //traverse and find exit
- System.out.println("start at " + s);
- Boolean result = traverse(all, s, t);
- if(result == true) {
- return "yes";
- }
- return "no";
- }
- public static Boolean traverse(List<Node> all, int current, int exit) {
- //check if current is exit
- Node curr = all.get(current - 1);
- Node endNode = all.get(exit - 1);
- Boolean que = (current==exit);
- Boolean resultado = false;
- // System.out.println(" current == exit is " + que);
- if(que || endNode.marked) {
- System.out.println("we at " + current + "->" + exit);
- System.out.println(" we in dis bitchh!!");
- curr.marked = true;
- return true;
- }
- //mark the current (aka <root>)
- if (curr.marked) {
- return false;
- }
- curr.marked = true;
- // PRE-oder <root><left><right>
- //now traverse and visit the rest, if one of them is marked return false
- //get outgoingedges of current
- List<Node> out = curr.outgoingEdges;
- for(Node n : out) {
- int newcurr = all.indexOf(n) + 1;
- System.out.println("new curr is " + newcurr);
- resultado = resultado || traverse(all, newcurr, exit);
- }
- System.out.println("we come down here at current is " + current);
- //check if exit node is marked
- // Node endNode = all.get(exit - 1);
- // if(endNode.marked) {
- // return true;
- // }
- System.out.println(" result is " + resultado);
- return resultado;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement