C++ 数据结构之先行课开设学期

该博客讨论了如何使用C++解决一个拓扑图问题,即确定在给定课程的先行课关系下最少需要安排多少个学期。博主采用贪婪算法,通过邻接数组、栈和入度数组来实现。在每学期,选择没有入边的未选课程,并更新状态,直至所有课程都被安排。附带了主函数和测试案例。
摘要由CSDN通过智能技术生成

问题描述如下:

某学院有n门课程,(i,j)表示i是j的先行课,即课程i必须在课程j之前的学期开设。对任意给出的先行课集合S={(1,3),(2,4)......},至少需要安排多少个学期?给出每个学期所开的课程清单。

    这是一个拓扑图,我用的是贪婪求解:

    存储课程用的是邻接数组,存储已找到的点的结构用的是栈stack<int> ss,存储每个点入度用的是数组indegree[];每次在所有没有选择的顶点中选择一个顶点W,它没有这样的入边(V,W),其中V不在ss中;

    每学期遍历一次,把所有存进栈里的点输出,即为当前学期所要开设的课程。更新indegree,清空栈,重复操作,直到所有的点已被输出;

    以下是代码:   

#
采用C++编写,完成了题目的所有要求,并附有说明文档。 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学 期,每学期的时间长度和学分上限值均相等,每个专业开设程都是确定的,而且程在 开设时间的安排必须满足修关系。每门程有哪些修课程是确定的,可以有任意多门, 也可以没有。每门恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 [基本要求] (1)输入参数包括:学期总数,一学期的学分上限,每门程号(固定占3位的字母数字串)、学分和直接修课程号。 (2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使程尽可能地集中在前几个学期中。 (3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。 [测试数据] 学期总数:6;学分上限:10;该专业共开设12门程号从C01到C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。修关系如下: 程编号 程名称 决条件 C1 程序设计基础 无 C2 离散数学 C1 C3 数据结构 C1,C2 C4 汇编语言 C1 C5 语言的设计和分析 C3,C4 C6 计算机原理 C11 C7 编译原理 C5,C3 C8 操作系统 C3,C6 C9 高等数学 无 C10 线性代数 C9 C11 普通物理 C9 C12 数值分析 C9,C10,C1 [实现提示] 可设学期总数不超过12,程总数不超过100。如果输入的修课程号不在该专业开设程序列中,则作为错误处理。应建立内部程序号与程号之间的对应关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值