教学任务安排系统: #include "stdlib.h" #include "stdio.h" #define MAX 100 typedef struct { int s[MAX][MAX];//用二维数组存放教师专业特长 int D[MAX]; //用一维数组存放安排的教学任务 }MGraph; MGraph G; int creat(int *k,int n) //初始化,将二维数组s和一维数组D的adj全部赋值为0 { int i,j; for(i=1;i<=n;i++) { G.D[i]=0; k[i]=0; for(j=1;j<=n;j++) G.s[i][j]=0; } printf("/n"); printf("科目数成功确定为 %d/n",n); return 1; } int techer_speciality(int n) { int k,i; printf("请输入教师专业特长编号(1-%d) 0表示结束输入:/n",n); for(i=1;i<=n;i++) { printf("输入教师编号为 %d 的特长专业号:",i); do { scanf("%d",&k); if(k>n) { printf("超出范围,重新输入: "); continue; } else G.s[i][k]=1; }while(k); } printf("设定成功!/n");; return 1;//设定成功! } int serch(int i,int j,int n) { for(;j<=n;j++) { if(G.s[i][j]==1) break; } return j; } int serch_error(int *k,int n)//在所有老师都有被进行安排过的情况下运行 { int t,i,j; static int b=0; //b检测是否有两个或两个以上的专业只有一个老师可授 for(j=1;j<=n;j++) if(k[j]==0) //存在有科目没有老师授课 for(i=1;i<=n;i++) //哪个老师可以授此科目且此科目当前还没有老师授课 if(G.s[i][j]==1) { if(b!=i) b=i; else return 0; //if(b!=i)b=i记录第一个没有授课的科目但有老师可以授课的老师下标 //若