aboutsummaryrefslogtreecommitdiff
path: root/CourseSchedule.java
blob: 6f85f44ed73c5b657055523ba06179048e34eed9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.lang.*;
import java.util.*;
import node.*;

class CourseSchedule {
	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 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 canFinish(int[][] prerequisites) {
		GraphNode node = createGraph(prerequisites);
		return !detectCycle(node);
	}

	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));
	}
}