diff options
Diffstat (limited to 'CourseSchedule.java')
-rw-r--r-- | CourseSchedule.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/CourseSchedule.java b/CourseSchedule.java new file mode 100644 index 0000000..5b5ed02 --- /dev/null +++ b/CourseSchedule.java @@ -0,0 +1,60 @@ +import java.lang.*; +import java.util.*; +import node.*; + +class CourseSchedule { + public static boolean canFinish(int[][] prerequisites) { + GraphNode node = createGraph(prerequisites); + return !detectCycle(node); + } + + public static GraphNode createGraph(int[][] prerequisites) { + HashMap<Integer, GraphNode> map = new HashMap<Integer, GraphNode>(); + for (int[] prerequisite : prerequisites) { + if (map.containsKey(prerequisite[0])) { + if (map.containsKey(prerequisite[1])) { + map.get(prerequisite[0]).neighbors.add(map.get(prerequisite[1])); + } else { + GraphNode node = new GraphNode(prerequisite[1]); + map.put(node.val, node); + map.get(prerequisite[0]).neighbors.add(node); + } + continue; + } + GraphNode pre = new GraphNode(prerequisite[1]); + GraphNode node = new GraphNode(prerequisite[0], + new ArrayList<GraphNode>(Arrays.asList(pre))); + map.put(pre.val, pre); + map.put(node.val, node); + } + // TODO: return first GraphNode in map + return map.get(1); + } + + public static boolean detectCycle(GraphNode node) { + Stack<GraphNode> stack = new Stack<GraphNode>(); + ArrayList<GraphNode> visited = new ArrayList<GraphNode>(); + stack.push(node); + while (!stack.empty()) { + node = stack.pop(); + if (visited.contains(node)) { + System.out.println("Cycle " + node.val); + return true; + } + visited.add(node); + System.out.println("Node: " + node.val); + System.out.print("Neighbors: "); + for (GraphNode neighbor : node.neighbors) { + stack.push(neighbor); + System.out.print(neighbor.val + " "); + } + System.out.println(); + } + return false; + } + + public static void main(String[] args) { + int[][] prerequisites = {{1, 4}, {1, 2}, {2, 3}, {3, 6}, {6, 2}, {4, 5}}; + System.out.println(canFinish(prerequisites)); + } +} |