zoukankan      html  css  js  c++  java
  • 课程表-python

     问题:

    # 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 
    #
    # 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,
    # 其中 prerequisites[i] = [ai, bi] ,表
    # 示如果要学习课程 ai 则 必须 先学习课程 bi 。
    #
    #
    # 例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。

    方法:

    一、广度优先遍历

    需要一个队列进行搜索,结合拓扑排序

    def test(numCourses, prerequisties):
        edges = collections.defaultdict(list)
        vertexs = [0] * numCourses
        # put data
        for each in prerequisties:
            edges[each[1]].append(each[0])
            vertexs[each[0]] += 1
        # put not pre course into queue
        q = collections.deque([e for e in range(numCourses) if vertex[e]==0])
        # node visited flag
        visited = 0
        while q:
            visited += 1
            u = q.popleft()
            for e in edges[u]:
                vertexs[e] -= 1
                if vertexs[e]==0:
                    q.append(e)
        return visited == numCourses

     二、深度优先

    def test(numCourses, prerequisites):
        edges = collcetions.defaultdict(list)
        visited = [0]*numCourses
        result = list()
        valid = True
        for each in prerequisites:
            edges[each[1]].append(each[0])
        def dfs(v):
            nonlocal valid
            visitd[v] == 1
            for e in edges[v]:
                if visited[e]==0:
                    dfs(e)
                    if not valid:
                        return
                elif visited[e]==2:
                    valid = False
                    return
            visited[v] == 2
            result.append(v)
            
        for i in range(numCourses):
            if valid and not visited[i]:
                dfs(i)
        return valid
    时刻记着自己要成为什么样的人!
  • 相关阅读:
    栅栏与自由
    如何种玉米和黄豆
    除了CRUD也要注意IO
    奶糖测试
    看你知道不知道VB6的模块之间循环关系
    [zz]C++类模板
    [zz]C++中std::tr1::function和bind 组件的使用
    [zz]c/c++一些库
    [zz] Python性能鸡汤
    [zz]Linux 下 socket 编程示例
  • 原文地址:https://www.cnblogs.com/demo-deng/p/15424794.html
Copyright © 2011-2022 走看看