資源簡介
【問題描述】
大學的每個專業都有制定教學計劃。假設任何專業都有固定的學習年限,每個學年有兩個學期,每個學期的時間長度和學分上限值均相等。每個專業開設的課程都是確定的,并且課程在開設時間的安排必須滿足先修關系。每門課程有哪些先修課程都是確定的,可以有任意多門,也可以沒有。每門課恰好占一個學期。試在這樣的前提下設計一個教學計劃編制程序。
【基本要求】
(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
- 下一篇:科學型計算器 絕對可以運行
評論
共有 條評論