资源简介
【问题描述】
大学的每个专业都有制定教学计划。假设任何专业都有固定的学习年限,每个学年有两个学期,每个学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,并且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程都是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。
【基本要求】
(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
- 上一篇:精算笔记UNSW
- 下一篇:科学型计算器 绝对可以运行
评论
共有 条评论