Leetcode # 210. Course Schedule II
https://leetcode.com/problems/course-schedule-ii/
Explanation
使用 in-degree
關鍵在於
- 優先提取 in-degree 為 0 的 vertex(即該 vertex 已無任何前導 vertex)
- vertex被提取時,調整其子 vertex 的 in-degree
當 graph 中有 loop
當 graph 中有 loop 時,
會導致 loop 中的 verteces 的 in-degree 無法被消除為 0,
並且此題則為無解
Solution
class Solution: def findOrder(self, numCourses: int, prerequisites: List[List[int]]) -> List[int]: adj_list = collections.defaultdict(list) in_degree = collections.Counter() for dest, src in prerequisites: adj_list[src].append(dest) in_degree[dest] += 1 zero_indegree_queue = collections.deque([i for i in range(numCourses) if i not in in_degree]) topological_sorted_order = [] while zero_indegree_queue: vertex = zero_indegree_queue.popleft() topological_sorted_order.append(vertex) if vertex in adj_list: for neighbor in adj_list[vertex]: in_degree[neighbor] -= 1 if in_degree[neighbor] == 0: zero_indegree_queue.append(neighbor) return topological_sorted_order if len(topological_sorted_order) == numCourses else []
Last Updated on 2023/08/16 by A1go