사용자 도구

사이트 도구


ps:problems:leetcode:207

Course Schedule

ps
링크leetcode.com/…
출처LeetCode
문제 번호207
문제명Course Schedule
레벨Medium
분류

그래프, 사이클 찾기

시간복잡도O(v+e)
인풋사이즈v<=10^5
사용한 언어Python
제출기록124 ms / 15.2 MB
최고기록72ms
해결날짜2020/11/18
  • 그래프 이론에서 대표적인 문제 중 하나인, 방향 그래프에서 사이클의 존재 여부를 확인하는 문제.

풀이

코드

"""Solution code for "LeetCode 22. Course Schedule".

- Problem link: https://leetcode.com/problems/course-schedule/
- Solution link: http://www.teferi.net/ps/problems/leetcode/207
"""

from typing import AbstractSet, List, Sequence


def topologicalSort(graph: Sequence[AbstractSet[int]]) -> List[int]:
    """Returns a list of nodes in topologically sorted order."""
    indegrees = [0] * len(graph)
    for successors in graph:
        for v in successors:
            indegrees[v] += 1

    stack = [u for u, indegree in enumerate(indegrees) if indegree == 0]
    result = []
    while stack:
        u = stack.pop()
        result.append(u)
        for v in graph[u]:
            indegrees[v] -= 1
            if indegrees[v] == 0:
                stack.append(v)

    if len(result) != len(graph):
        raise ValueError('found a cycle')
    return result


class Solution:
    def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
        graph = [set() for _ in range(numCourses)]
        for u, v in prerequisites:
            graph[u].add(v)
        try:
            topologicalSort(graph)
            return True
        except ValueError:
            return False

토론

댓글을 입력하세요:
T J W V K
 
ps/problems/leetcode/207.txt · 마지막으로 수정됨: 2020/11/28 13:27 저자 teferi