用匈牙利算法排课,算法已写出,需把算法写出C程序
设班级教师二部图G的二分类为(X,Y),X={x1,x2,...,xn},xi表示班级,Y={y1,y2,...,ym},yj表示教师,有|X|=|Y|,在Y中增加一些孤立点成Y’,使|X|=|Y’|。第1步:令G’=G是以(X,Y’)为二分类划分的正则二部图。
第2步:若G’的最大度与最小度相等,则令k=1,转第4步。否则转第3步。
第3步:取x0∈X,y0∈Y,使得:dG’(x0)=mindG’(xi),dG’(y0)=mindG’(yj),
其中i,j=1,2,...,n,令G’=G’+[x0,y0],转第2步。
第4步:任取G’的一个对集M。
第5步:若X已M-饱和,转第8步。否则,取X中一个M-不饱和点u,作S=﹛u﹜,T=¢。
第6步:在N(S)-T中取一点y。
第7步:若y是M-饱和的,有z使[y,z]∈M,作S=S∪﹛z﹜,T=T∪﹛y﹜,转第6步。否则,存在一条以u为始结点,y为终结点的增广链M-P,作M=M⊿E(P),转第5步。
第8步:若k≠最大度,令k=k+1,G’=G’-M,转第4步。
第9步:把对集中多余的边去掉。
第10步:把对集数扩大到P。
第11步:把起初对集中的边均匀分配到P个对集中。
第12步:为每个对集指定一种颜色。