//教学计划编制//济南大学信息学院 计算机 数据结构 课程设计/*【问题描述】大学的每个专业都要制定教学计划,假设任何专业都有固定的学习年限,每学年含两学期,美学气的时间长度和学分上限均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课敲好占一个二学期。试在这样的前提下设计一个教学计划编制程序。【基本要求】(1)输入残输入包括:学期总数,一学期的学分上限,每门课的课程号(固定占3为的字母数字串)、学分和直接先修的课程号。*/#include#include #include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status; // Status是函数的类型,其值是函数结果状态代码#define MAX_NAME 10 // 顶点字符串的最大长度#define MAXCLASS 100int Z=0;int X=0;int xqzs,q=1,xfsx;typedef int InfoType;typedef char VertexType[MAX_NAME]; // 字符串类型// 图的邻接表存储表示#define MAX_VERTEX_NUM 100typedef enum{DG}GraphKind; // {有向图,有向网,无向图,无向网} typedef struct ArcNode{int adjvex; // 该弧所指向的顶点的位置struct ArcNode *nextarc; // 指向下一条弧的指针InfoType *info; // 网的权值指针)}ArcNode; // 表结点typedef struct{VertexType data; // 顶点信息ArcNode *firstarc; // 第一个表结点的地址,指向第一条依附该顶点的弧的指针}VNode,AdjList[MAX_VERTEX_NUM]; // 头结点typedef struct{AdjList vertices,verticestwo;int vexnum,arcnum; // 图的当前顶点数和弧数int kind; //图的种类标志}ALGraph;// 图的邻接表存储的基本操作int LocateVex(ALGraph G,VertexType u){ // 初始条件: 图G存在,u和G中顶点有相同特征// 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 int i;for(i=0;iif(strcmp(u,G.vertices[i].data)==0)return i;return -1;}Status CreateGraph(ALGraph *G){ //采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图) int i,j,k;VertexType va,vb;ArcNode *p;printf(vexnum,MAX_NAME);for(i=0;i{scanf(ize+=STACKINCREMENT;}*((*S).top)++=e;return OK;}typedef int pathone[MAXCLASS];typedef int pathtwo[MAXCLASS];Status TopologicalSort(ALGraph G){ // 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK// 否则返回ERROR。int i,k,j=0,count,indegree[MAX_VERTEX_NUM];bool has=false;SqStack S;pathone a;pathtwo b;ArcNode *p;FindInDegree(G,indegree); // 对各顶点求入度indegree[0..vernum-1] InitStack(&S); // 初始化栈for(i=0;iif(!indegree[i]){ Push(&S,i); //cout}// 入度为者进栈count=0; // 对输出顶点计数while(!StackEmpty(S)){ // 栈不空Pop(&S,&i);a[i]=*G.vertices[i].data;b[i]=*G.verticestwo[i].data;printf(的学分上限:\n
//教学计划编制//济南大学信息学院 计算机 数据结构 课程设计/*【问题描述】大学的每个专业都要制定教学计划,假设任何专业都有固定的学习年限,每学年含两学期,美学气的时间长度和学分上限均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课敲好占一个二学期。试在这样的前提下设计一个教学计划编制程序。【基本要求】(1)输入残输入包括:学期总数,一学期的学分上限,每门课的课程号(固定占3为的字母数字串)、学分和直接先修的课程号。*/#include#include #include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1typedef int Status; // Status是函数的类型,其值是函数结果状态代码#define MAX_NAME 10 // 顶点字符串的最大长度#define MAXCLASS 100int Z=0;int X=0;int xqzs,q=1,xfsx;typedef int InfoType;typedef char VertexType[MAX_NAME]; // 字符串类型// 图的邻接表存储表示#define MAX_VERTEX_NUM 100typedef enum{DG}GraphKind; // {有向图,有向网,无向图,无向网} typedef struct ArcNode{int adjvex; // 该弧所指向的顶点的位置struct ArcNode *nextarc; // 指向下一条弧的指针InfoType *info; // 网的权值指针)}ArcNode; // 表结点typedef struct{VertexType data; // 顶点信息ArcNode *firstarc; // 第一个表结点的地址,指向第一条依附该顶点的弧的指针}VNode,AdjList[MAX_VERTEX_NUM]; // 头结点typedef struct{AdjList vertices,verticestwo;int vexnum,arcnum; // 图的当前顶点数和弧数int kind; //图的种类标志}ALGraph;// 图的邻接表存储的基本操作int LocateVex(ALGraph G,VertexType u){ // 初始条件: 图G存在,u和G中顶点有相同特征// 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 int i;for(i=0;iif(strcmp(u,G.vertices[i].data)==0)return i;return -1;}Status CreateGraph(ALGraph *G){ //采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造种图) int i,j,k;VertexType va,vb;ArcNode *p;printf(vexnum,MAX_NAME);for(i=0;i{scanf(ize+=STACKINCREMENT;}*((*S).top)++=e;return OK;}typedef int pathone[MAXCLASS];typedef int pathtwo[MAXCLASS];Status TopologicalSort(ALGraph G){ // 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK// 否则返回ERROR。int i,k,j=0,count,indegree[MAX_VERTEX_NUM];bool has=false;SqStack S;pathone a;pathtwo b;ArcNode *p;FindInDegree(G,indegree); // 对各顶点求入度indegree[0..vernum-1] InitStack(&S); // 初始化栈for(i=0;iif(!indegree[i]){ Push(&S,i); //cout}// 入度为者进栈count=0; // 对输出顶点计数while(!StackEmpty(S)){ // 栈不空Pop(&S,&i);a[i]=*G.vertices[i].data;b[i]=*G.verticestwo[i].data;printf(的学分上限:\n