安排课程,N门课程相互约束,prerequests = [[1],[2],[0]],上第0门课需要先上第1门课,上第1门课需要线上第2门课,上第2门课需要线上第0门课。

在这里我们需要体会图的遍历,有时并不需要完全遍历图,遍历图是按照某种策略的,比如BFS策略是遍历离当前结点最近的未遍历的所有的点,DFS遍历当前结点最近的一个点,在图的遍历中,特别是对实际问题,明确什么是点,什么是边,以及遍历的贪心策略。

代码实现如下:

class Soulution:def scheduleCourse(self,prerequests):num = len(prerequests)indegree = [[],[],[],[]]# prerequests为出度表,根据出度表构建入度表,删除某结点时,就可以删除,# 就知道哪些结点需要删除出度结点for from_id in range(num):for to_id in prerequests[from_id]:indegree[to_id].append(from_id)print(indegree)# 根据出度表,构建遍历的队列,遍历的策略是,那些出度为0的点queue =[]degree =[-1]*numfor i in range(num):degree[i]= len(prerequests[i])if degree[i] == 0:queue.append(i)# 每次弹出一个出度为0的点,然后删除和这个点相邻的点的出度,这个地方只需要# 将出度的数量-1就行了# count表示已上了几门课count =0while queue:curid = queue.pop()count +=1# 下面是更新出度,更新待上课列表的操作for from_id in indegree[curid]:degree[from_id] -=1if degree[from_id] == 0:queue.append(from_id)# 当上了的课程和总课程一致时代表上完了,否则代表有环,剩余课程相互约束无法先后上            return count == num

测试结果:

prerequests = [[1],[2],[0]]
print(prerequests)
print(Soulution().scheduleCourse(prerequests))prerequests1 = [[1],[3],[3],[]]
print(prerequests1)
print(Soulution().scheduleCourse(prerequests1))runfile('D:/share/test/schedulleCourse.py', wdir='D:/share/test')
[[1], [2], [0]]
[[2], [0], [1], []]
False
[[1], [3], [3], []]
[[], [0], [], [1, 2]]
True

图形结构:安排课程,图的遍历策略相关推荐

  1. 考勤助手——教务安排课程时序图

    本周将上周的教务安排课程用例图完善后,进行了时序图的绘制: 1.安排新课程时序图如下: 2.修改课程时序图如下: 转载于:https://www.cnblogs.com/stopfalling/p/5 ...

  2. 图形结构:克隆图,图的遍历的应用,递归和迭代

    克隆一张无向图,图中的每个节点包含一个 label (标签)和一个 neighbors (邻接点)列表 . 克隆图时图的遍历的应用,树的遍历,图的遍历是最基本的操作,他们和数组的遍历是一样的,线性结构 ...

  3. c++ 遍历list_数据结构之图的遍历,一篇文章get全部考点

    图的概念 举个例子,假设你的微信朋友圈中有若干好友:张三.李四.王五.赵六.七大姑.八大姨. 而你七大姑的微信号里,又有若干好友:你.八大姨.Jack.Rose. 微信中,许许多多的用户组成了一个多对 ...

  4. 图的遍历算法【数据结构F】

    图的遍历算法有哪两种? 深度优先调度算法---------将图结构看成是树形结构,树形结构的子图直接是没有交叉的,但是对于图结构的树形结构之间是有交叉的,类比于树形结构的二叉树,左指数和右指数都会相应 ...

  5. 【数据结构】之图的遍历(C语言)

    文章目录 定义 深度优先遍历 广度优先遍历 测试代码 定义 从图中某一顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这一过程就叫做图的遍历(Traversing Graph). 深度优先遍历 ...

  6. 图的遍历c语言数据结构实验报告,数据结构图的遍历实验报告.doc

    数据结构图的遍历实验报告.doc 实 验 报 告课程名称 数据结构实验名称 图的遍历姓 名专 业 计算机科学与技术班 级 计算机学 号成绩计算机科学与技术学院实验教学中心2015 年 11 月 20 ...

  7. 大学计算机课程教学,提高大学生计算机基础课程教学质量的策略

    [摘 要]从教学目标定位.教学内容优化.教学案例选取.教学过程实施.网络教学平台搭建.教学团队建设等七方面论述提高计算机基础课程教学质量的有效策略. [关键词]计算机基础课程 提高教学质量 策略 [中 ...

  8. 图的遍历(DFS和BFS)

    图的遍历是指从图中某一顶点出发,访遍图中其余顶点,且使每一个顶点仅被访问一次. 一.深度优先遍历(Depth First Search) 假设给定图G的初态是所有顶点均未曾访问过.在G中任选一顶点v为 ...

  9. STEAM课程的五大教学策略

    格物斯坦小坦克就stem课程的五大教学策略来讲一讲.激发求知欲.培养思维技巧是STEAM课程活动的重点之一."先玩后做",即先呈现成果的乐趣再探索制作,让学生在实践活动中体验和理解 ...

最新文章

  1. mysql数据库多级分类汇总_sql多级分类汇总实现介绍
  2. jquery 分片上传php,php 大文件分片上传
  3. TYVJ P2032 「Poetize9」升降梯上 spfa最短路
  4. 20个Flutter实例视频教程-第03节: 不规则底部工具栏制作-1
  5. php获取蓝凑云文件列表,php调用蓝奏云下载接口
  6. HDFS剩余空间大小的Java接口,java api获取hdfs索引大小
  7. mxnet深度学习(KVS)
  8. php 监听端口数据客户端ip_PHP做端口监听示例代码
  9. Hibernate自动事务揪出的编码不规范
  10. 2018-2019-1 20165320 《信息安全系统设计基础》第八周学习总结
  11. excel日期相关计算天数
  12. java bigdecimal取余_BigDecimal求余操作
  13. 客户端常见的几种数据传输方法
  14. 转发技术风雨三十年,你经历过……
  15. sklearn- 一元线性回归
  16. 宾馆客房管理系统-vue前端开发
  17. 问卷调查设计以及敏感性问题调查
  18. word下载哪一个比较好
  19. CST STUDIO SUITE 2022 软件下载与安装教程
  20. 将多名学生成绩绘制在一张画布中,并在图中显示学生成绩

热门文章

  1. wordpress PHP合并js,如何在WordPress中添加外部JavaScript
  2. c++生成光栅条纹程序_【光学学报】激光分束,自由曲面分束器能挑战相位光栅吗?...
  3. JSON字符串转为指定实体类对象
  4. 计算机社团嘉年华的游戏,社团嘉年华,游戏大乱斗!
  5. postman post gin 接收不到_golang web开发——gin实战入门
  6. python绘制坐标点画出半径_24行Python代码让小球“弹”起来
  7. macos big sur升级失败_【王牌出击】升级欲望更为强烈 斯旺西有望反客为主
  8. 【ruoyi若依】为当前页添加显示事件
  9. 查看oracle连接数的消耗情况
  10. ortools解决tsp_ortools系列:路由问题1