• 大小: 339KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: 其他
  • 标签:

资源简介

【问题描述】 大学的每个专业都有制定教学计划。假设任何专业都有固定的学习年限,每个学年有两个学期,每个学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,并且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程都是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。 【基本要求】 (1)输入参数包括:学期总数,一个学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。 (2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。 (3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#define MAX_VERTEX_NUM 100 //最大课程总数
using namespace std;
struct ArcNode
{
       int adjvex;//边的终点
       ArcNode *nextarc;//指向下一条边
};
typedef struct VNode
{
       string name;        //课程名
       string classid;      //课程号
       int credit;         //课程的学分
       int indegree;       //该结点的入度
       int state;          //该节点的状态
       ArcNode *firstarc; //指向第一条依附该顶点的边
}VNodeAdjList[MAX_VERTEX_NUM];//最初设定为100门课
typedef int ElemType;
struct ALGraph
{
       AdjList vertices;
       int vexnum arcnum;
};
class stack
{
    private:
    struct node
    {
        int data;
        node *next;
        node(const int &xnode *N=NULL)
        {
            data=x;
            next=N;
        }
        node():next(NULL){}
        ~node(){};
    };
    node *top_p;
 public :
    stack();
    ~stack();
    bool isEmpty() const;
    void push(const int &x);
    int pop();
};
stack::stack()
{
    top_p=NULL;
}
stack::~stack()
{
    node *tmp;
    while(top_p!=NULL)
    {
        tmp=top_p;
        top_p=top_p->next;
        delete tmp;
    }
}
bool stack::isEmpty() const
{
    return top_p==NULL;
}
void stack::push(const int &x)
{
    top_p=new node (xtop_p);
}
int stack::pop()
{
    node *tmp=top_p;
    int x=tmp->data;
    top_p=top_p->next;
    delete tmp;
    return x;
}
void CreatGraph(ALGraph *G)//构件图
{   int i m n;
    string firstsecond;
    ArcNode *p;
    cout<<“请输入需要编排课程总数:“<    cin>>G->vexnum;
    for( i=1;i<=G->vexnum;i++)
    {   cout<<“请输入课程名“<        cin>>G->vertices[i].name;
        cout<<“请输入课程号“<        cin>>G->vertices[i].classid;
        cout<<“请输入该课程的学分“<         cin>>G->vertices[i].credit;
        G->vertices[i].indegree=0;
        G->vertices [i].state=0;
        G->vertices[i].firstarc=NULL;
    }
    cout<<“请输入课程先修关系总数:“<    cin>>G->arcnum;
    cout<<“请顺序输入每个课程先修关系(先修课程在前并以空格作为间隔):“<    for (i = 1; i <= G->arcnum; i++)
    {
        cout<        cin>>first>>second;
        for(int j=1;j<=G->vexnum;j++)
        {
            if(first==G->vertices[j].classid)
            {
                n=j;
                break;}

        }
        for(int j=1;j<=G->vexnum;j++)
        {
            if(second==G->vertices[j].classid)
            {
                m=j;
                break;}

        }
        p=new ArcNode;
        p->adjvex = m;
        p->nextarc = G->vertices[n].firstarc;//插在表头
        G->vertices[n].firstarc = p;
    }
}
void FindInDegree(ALGraph G int indegree[])//求图中各节点的入度
{
    int i;
    for (i = 1; i <= G.vexnum; i++)
        indegree[i] = 0;

    for (i = 1; i <= G.vexnum; i++)
    {
        while (G.vertices[i].firstarc)
        {
            indegree[G.vertices[i].firstarc->adjvex]++;
            G.vertices[i].firstarc = G.vertices[i].firstarc

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1050  2019-01-09 12:03  教学计划编制问题\4.1.2.cbp

     文件       8370  2019-01-09 17:15  教学计划编制问题\main.cpp

     文件     413422  2019-05-22 14:10  教学计划编制问题\p4_1实验报告.docx

     目录          0  2019-05-22 14:10  教学计划编制问题

----------- ---------  ---------- -----  ----

               422842                    4


评论

共有 条评论