python自动排课表_【python-leetcode210-拓扑排序】课程表Ⅱ
现在你总共有 n 门课需要选,记为 0 到 n-1。
在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们: [0,1]
给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。
可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。
示例 1:
输入: 2, [[1,0]]
输出: [0,1]
解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。
示例 2:
输入: 4, [[1,0],[2,0],[3,1],[3,2]]
输出: [0,1,2,3] or [0,2,1,3]
解释: 总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。
因此,一个正确的课程顺序是 [0,1,2,3] 。另一个正确的排序是 [0,2,1,3] 。
说明:
输入的先决条件是由边缘列表表示的图形,而不是邻接矩阵。详情请参见图的表示法。
你可以假定输入的先决条件中没有重复的边。
提示:
这个问题相当于查找一个循环是否存在于有向图中。如果存在循环,则不存在拓扑排序,因此不可能选取所有课程进行学习。
这里只需要记录结果就行了:需要注意的是,不仅需要判断是否能够学完所有课程,还要保存线所学课程的顺序
利用BFS:
classSolution:def findOrder(self, numCourses: int, prerequisites: List[List[int]]) ->List[int]:
indegrees=[0 for _ inrange(numCourses)]
adjacency=[[] for _ inrange(numCourses)]for cur,pre inprerequisites:
indegrees[cur]+=1adjacency[pre].append(cur)from collections importdeque
queue=deque()for i inrange(len(indegrees)):if notindegrees[i]:
queue.append(i)
res=[]whilequeue:
t=queue.popleft()
res.append(t)
numCourses-=1
for i inadjacency[t]:
indegrees[i]-=1
if notindegrees[i]:
queue.append(i)if numCourses:
return []
else:
return res
第二种方式是利用深度优先变遍历(DFS):
classSolution:def __init__(self):
self.res=[]deffindOrder(self, numCourses,prerequisites):
adjacency=[[] for _ inrange(numCourses)]
flags=[0 for _ inrange(numCourses)]for cur,pre inprerequisites:
adjacency[pre].append(cur)for i inrange(numCourses):if notself.dfs(i,adjacency,flags):return[]return self.res[::-1]defdfs(self,i,adjacency,flags):#如果值为1,表明已经被访问过
if flags[i] == 1:returnTrue#如果值为2,表明已第二次被访问,说明有环
if flags[i] == 2:returnFalse
flags[i]=2
for j inadjacency[i]:if notself.dfs(j,adjacency,flags):returnFalse#到这里说明所有前驱节点都访问完了
#并将当前节点状态置为1
flags[i]=1self.res.append(i)return True
相关文章:

简单粗暴告诉你什么是区块链
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链是什么?它是如何工作的? 比特币已经成为现代互联网的潮流 - 随之而来的是区块链。人们说区块链技术将导致互联网运作…

【Codeforces】Round #375 (Div. 2)
Position:http://codeforces.com/contest/723 我的情况 啊哈哈,这次raiting肯定要涨,接受过上次的教训,先用小号送肉,大号都是一发切,重回蓝咯 结果。。。 FST!! 不,这次是skip&…

python的matplotlib背景线_python中matplotlib的颜色及线条 控制
https://www.cnblogs.com/darkknightzh/p/6117528.htmlhttps://blog.csdn.net/qq_34337272/article/details/795555441.设置栅格(1)使用pyplot api命令打开栅格:plt.grid(true)设置栅格格式:plt.grid(colorr, linestyle--, linewidth1,alpha0.3)(2)使用axes类面向对…

系统权限设计思路
权限系统通常包括如下基本元素:用户、角色、权限、资源、操作。 角色分类:总经理、部长、员工。(在实际中一个用户可能存在多个角色,这就要考虑到权限累加处理) 权限分类:如”员工考勤权限”、”审核权限”…

“区块链”究竟是什么
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 什么是区块链? 说到区块链,就不得不说比特币。 2008年底,比特币之父中本聪发表了一个关于他研究的电子现金…

leetcode 179. 最大数
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。 自己写了很久的比较函数,时钟有…

cf-Sasha and Array
题目链接 http://codeforces.com/problemset/problem/719/E 解题思路 矩阵上的线段树。 因为矩阵有分配律(AB)C AC BC,所以计算总和时直接把增量矩阵乘上去就行了。用矩阵快速幂。 fib的计算尽量拉到主函数计算。 代码 #include<stdio.h…

实对称矩阵的性质_浅谈矩阵的相似对角化(一)
森屿瑾年:浅谈线性变换和矩阵之间的关系zhuanlan.zhihu.com通过前面的讨论,我们引出了线性变换在不同基下的矩阵之间的关系,知道了线性变换在不同基下的矩阵是相似的,进而我们可以通过选取不同的基,使得线性变换在这…

区块链技术未来可能用于哪些方面?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 当世界上从100比特币购买25美分的比萨饼,到一比特币兑换4800人民币的天价,在这风起云涌的纪念,我们见证了一个…

tomcat启动
tomcat的启动一般是从startup.bat/startup.sh开始,然后启动catalina.bat/catalina.sh,然后启动bootstrap.jar包 那么它们启动的时候都做了哪些事情呢? 首先是startup.bat,startup.bat做了什么? 第二是catalina.bat&…

ERROR: from PIL import Image ImportError: No module named PIL
ERROR: from PIL import Image ImportError: No module named PIL 到 http://www.pythonware.com/products/pil/ 下载相关支持的版本 我的是python2.7 直接打开,然后一路按“下一步”,就行 转载于:https://www.cnblogs.com/jakejian/p/8992…

python中font_Python ColorFont包_程序模块 - PyPI - Python中文网
控制台打印彩色字体0 黑色 8 灰色1 蓝色 9 淡蓝色2 绿色 A 淡绿色3 浅绿色 B 淡浅绿色4 红色 C 淡红色5 紫色 D 淡紫色6 黄色 E 淡黄色7 白色 F 亮白色格式:0x12高位代表背景色,低位代表字体颜色0x10 | 0x020x10代表背景色,0…

区块链技术到底有啥用?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 前言:关于区块链适合做什么和不适合做什么?一直都有争议。那么,通过什么方式来辨别呢?本文用详细的…

博客作业04--树
一.学习总结(2分) 1.1树结构思维导图 1.2 树结构学习体会 树的前中后序递归操作的访问路径都如下图 树的层次遍历的路径则如下图 操作{ 进队第一个节点, while(队不空) { 访问该节点, if(BT->lchild!NULL)进队。 if…

oracle数据如何获取游标中动态字段_如何实现报表数据的动态层次钻取(二)
上一篇《如何实现报表数据的动态层次钻取(一)》介绍了利用复杂 sql 实现动态层次结构的方法,但该方法依赖 Oracle 的递归语法,在其他类型的数据库中难以实现。要想通用地实现此类报表,可以使用下面介绍的“集算脚本 本…

使用jsonp跨域请求后可以获得数据,但是进入error方法,返回parseerror
$.ajax({ url:url, dataType:jsonp, jsonp: callback,//回调函数名字 jsonpCallback: success_jsonpCallback,//可以不写,也可以自定义,用来取代 jQuery 自动生成的随机函数名,不写将由jq自动生成,每次生成的结果都不…

EOS技术学习笔记
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 EOS.IO软件引入了一种新的块链架构,旨在实现分布式应用的性能扩展。这是通过创建一个可以构建应用程序的类似操作系统的架构来实现的。…

PHP的一种缓存方案静态化
1,解决的问题。 2.如何实现。 面对大流量网站频繁访问数据库的一种优化,比如博客网站。不可能每个人查看都访问一次数据库。为了解决大量不必要访问的问题。 可以把第一次的内容保存为html页面。再以后定义的过期时间内都访问该静态页面。 以下是一个小的demo index…

python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...
UDID全名:Unique Device Identifie(设备唯一标识符)说明:UDID,即设备唯一标识符,这是除序列号之外每台iOS设备的独一无二的号码。UDID只是和设备相关的,是用来区分每一个唯一的iOS设备(包括iPhone、iPad等),…

区块链安全入门笔记
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 虽然有着越来越多的人参与到区块链的行业之中,然而由于很多人之前并没有接触过区块链,也没有相关的安全知识,安…

PHP程序员的技术成长规划
PHP程序员的技术成长规划 作者:黑夜路人(2014/10/15) 按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个…
【资源共享】RK3288 WiFiBT 开发配置参考说明
本文档主要介绍RK3288平台的WiFi&BT配置说明。 下载地址:http://dev.t-firefly.com/thread-13642-1-1.html更多开发资料请到社区精华系列“资源共享”专栏下载http://dev.t-firefly.com/forum-263-1.html转载于:https://www.cnblogs.com/TeeFirefly/p/9001757.h…

软件工程实训有必要吗_人工智能专业值得读吗?就业如何?
要说这几年的风口,人工智能首当其冲。热门是否代表了好就业?我觉得不是;那是不是就不好就业?我觉得也不是。先来看看这些耸人听闻的标题吧——“人工智能人才缺口超过500万,补齐人才短板乃是当务之急“人工智能就业前景…

区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 随着比特币价格暴涨,基于比特币的区块链技术引起各方关注,其核心就是共识算法。随着区块链技术的发展共识算法也在不断创新与…

【洛谷P1697】货车运输
首先,对于所有从x能到达y的路径中,限重越大越好 因此我们用Kruskal最大生成树得到一片森林(不一定都联通) 之后dfs维护森林的深度和LCA的预处理limit[x][0](x向上跳2^i步的边权最小值) 对于每个询问&…

win7上Docker使用
1、启动docker: Docker Quickstart Terminal (快捷键)启动docker 2、SECURECRT工具链接docker: 转载于:https://www.cnblogs.com/aibaiyang/p/9007074.html

qt4的quick程序升级到qt5_最新8月书单出炉!送给你程序员
8月好书赏不停,喜欢的就收藏一下。1、计算广告:互联网商业变现的市场与技术(第2版)作者:刘鹏、王超全球第一本全面讲解计算广告与互联网变现秘密的专业图书升级版北冥乘海生 刘鹏老师力作&#…

都说区块链颠覆未来,区块链究竟能改变什么?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链,有时像个天使,有时像个魔鬼。 有人说它是金融泡沫,说他是彻底的庞氏骗局;有人说它能改变世界…

python银行家算法代码_避免死锁的银行家算法C++程序实现
本篇博文为追忆以前写过的算法系列第二篇(20081021)温故知新目的:具有代表性的死锁避免算法是Dijskstra给出的银行家算法。本实验是基于银行家算法的思想通过编写C程序实现银行家算法的计算机程序化。使其更有用。同一时候也加深了有关自愿…

shell脚本编程学习笔记(四)shell操作数据库
一、数据库基本操作 1)登录mysql服务器:mysql -u root -p 密码 2)查看数据库:show databases 3)查看表:show tales from db; 4)查看表结构:desc table; 5)创建表…