教学计划编制

该博客介绍了一个利用拓扑排序算法解决课程安排的问题。通过创建队列并实现拓扑排序,确定课程的先修关系,确保课程的正确顺序,并在学分和学期数量的限制下给出安排方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
#define N 100
#define M 10010
template<class T>
class Queue
{
public:
    bool IsFull() const;
    bool IsEmpty() const;
    T front();
    void Pop();
    void Push(T &e);
    Queue(int size);
    ~Queue();
private:
    T *base;
    int top,rear;
    int maxsize;
};
template<class T>
bool Queue<T>::IsFull() const
{
    return rear == maxsize;
}
template<class T>
bool Queue<T>::IsEmpty() const
{
    return rear == top;
}
template<class T>
Queue<T>::Queue(int size):maxsize(size)
{
    base = new T[maxsize];
    if (base == NULL)
    {
        cout<<"Memory Allocation Failed!"<<endl;exit(0);
    }
    top = rear = 0;
}
template<class T>
void Queue<T>::Pop()
{
    top++;
}
template<class T>
void Queue<T>::Push(T &e)
{
    base[re
[ 问题描述 ] 大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限, 每学年含两学期, 每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的, 而且课程在开设时间的安排上必须满足先修关系。每门课程有哪些先修课程是确定的, 可以有任意多门, 也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 [ 基本要求 ] (1) 输入参数包括: 学期总数, 一学期的学分上限, 每门课的课程号( 固定占三位的字母数字串 ), 学分和直接先修课的课程号。 (2) 允许用户指定下列两种编排策略之一: 一是使学生在各学期的学习负担尽量均匀; 二是使课程尽可能地集中前几个学期中。 (3) 若根据给定的条件问题无解, 则报告适当的信息; 否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。 [ 测试数据 ] 学期总数: 6; 学分上限: 10; 该专业共开设 12 门课, 课程号从 C01 到 C12,学分顺序为 2,3,4,3,2,3,4,4,7,5,2,3。先修关系见教科书图 7.26。 [ 实现提示 ] 可设学期总数不超过 12, 课程总数不超过 100 。如果输入的先修课程号不在该专业开设的课程序列中, 则作为错误处理。应建立内部课程序号与课程号之间的对应关系。 [ 选作内容 ] 产生多种( 例如 5 种) 不同的方案, 并使方案之间的差异尽可能的大。
采用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。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。应建立内部课程序号与课程号之间的对应关系。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值