mysql自动排课_高校智能排课系统算法

1 ///

2 ///取最优的时间片id3 ///

4 /// 教室id

5 /// 星期id

6 /// 授课id

7 /// 班级id

8 /// 教室id(S)

9 ///

10 private int GetBestTime(int roomid,int wk,int tlid,intclid)11 {12 //定义初始化存放已排的时间片的数组

13 ArrayList uTime = newArrayList();14 //定义初始化存放空时间片的数组

15 ArrayList nTime = newArrayList();16

17 for (int i = 1; i <= 20; i++)18 {19 if (i != 7 && i != 8)20 {21 //==判断当前时间片是否为空

22 int timeid =wbgd.GetTimeID(wk, i);23 int rtlid =wbgd.GetTlIDByRoomATime(roomid, timeid);24 if (rtlid == 0)25 {26 //检测冲突

27 bool flag = true;28 DataTable dtteach =wbgd.GetTeachNameByTLID(tlid);29 for (int t = 0; t < dtteach.Rows.Count; t++)30 {31 int teachid = int.Parse(dtteach.Rows[t]["id"].ToString());32 if (!wbgd.CheckClash(timeid, teachid, roomid, clid))33 {34 flag = false;35 }36 }37 if(flag)38 {39 //加入空时间片数组

40 nTime.Add(timeid);41 }42 else

43 {44 continue;45 }46 }47 else if (rtlid ==tlid)48 {49 //加入已排时间片数组

50 uTime.Add(timeid);51 }52 else

53 {54 continue;55 }56 }57 }58 if (nTime.Count == 0)59 {60 return 0;61 }62 //判断这门授课已经插入了几条记录

63 if (uTime.Count == 0)64 {65 //如果没有则取最近的

66 return (int)nTime[0];67 }68 else if (uTime.Count == 1)69 {70 //如果有一条则取最远的

71

72 return (int)nTime[nTime.Count - 1];73

74 }75 else

76 {77 //否则进入已下循环,求出权值最大的时间片78 //max 存放最大的权值,index 存放最大权值空时间片数组的索引

79 int max = 0,index=0;80 for (int p = 0; p < nTime.Count; p++)81 {82 //m存放uTime中略大于nTine[i]的数83 //l存放uTime中略小于nTine[i]的数

84 intm, l;85 m = (int)uTime[1];86 l = (int)uTime[0];87 for (int j = 0; j < uTime.Count; j++)88 {89 if ((int)nTime[p] < (int)uTime[j])90 {91 m = (int)uTime[j];92 l = (int)uTime[j - 1];93 break;94 }95 }96 //如果权值大于max 则记录新的权值和索引

97 if (Math.Abs(m - (int)nTime[p]) *Math.Abs ((int)nTime[p] - l) >max)98 {99 max = Math.Abs(m - (int)nTime[p]) * Math.Abs((int)nTime[p] -l);100 index =p;101 }102 }103 //返回权值最大的时间片id

104 return (int)nTime[index];105 }106 }107

108

109 ///

110 ///取最优的连课时间片id111 ///

112 ///

113 ///

114 ///

115 ///

116 ///

117 private int GetBestTimeLK(int roomid, int wk, int tlid, intclid)118 {119 //定义初始化存放已排的时间片的数组

120 ArrayList uTime = newArrayList();121 //定义初始化存放空时间片的数组

122 ArrayList nTime = newArrayList();123

124 for (int i = 1; i <= 20; i+=2)125 {126 if (i != 7)127 {128 //==判断当前时间片是否为空

129 int timeid1 =wbgd.GetTimeID(wk, i);130 int timeid2 = wbgd.GetTimeID(wk, i + 1);131 int rtlid1 =wbgd.GetTlIDByRoomATime(roomid, timeid1);132 int rtlid2 =wbgd.GetTlIDByRoomATime(roomid, timeid2);133 if (rtlid1 == 0 && rtlid2 == 0)134 {135 //检测冲突

136 bool flag = true;137 DataTable dtteach =wbgd.GetTeachNameByTLID(tlid);138 for (int t = 0; t < dtteach.Rows.Count; t++)139 {140 int teachid = int.Parse(dtteach.Rows[t]["id"].ToString());141 if ((!wbgd.CheckClash(timeid1, teachid, roomid, clid)) && (!wbgd.CheckClash(timeid2, teachid, roomid, clid)))142 {143 flag = false;144 }145 }146 if(flag)147 {148 //加入空时间片数组

149 nTime.Add(timeid1);150 }151

152 }153 else if (rtlid1 == tlid || rtlid2 ==tlid)154 {155 //加入已排时间片数组

156 uTime.Add(timeid1);157 }158 else

159 {160 continue;161 }162 }163 }164 if (nTime.Count == 0)165 {166 return 0;167 }168 //判断这门授课已经插入了几条记录

169 if (uTime.Count == 0)170 {171 //如果没有则取最近的

172 return (int)nTime[0];173 }174 else if (uTime.Count == 1)175 {176 //如果有一条则取最远的

177 return (int)nTime[nTime.Count - 1];178 }179 else

180 {181 //否则进入已下循环,求出权值最大的时间片182 //max 存放最大的权值,index 存放最大权值空时间片数组的索引

183 int max = 0, index = 0;184 for (int p = 0;p < nTime.Count; p++)185 {186 int m = 0, l = 0;187 m = (int)uTime[1];188 l = (int)uTime[0];189 for (int j = 0; j < uTime.Count; j++)190 {191 if ((int)nTime[p] < (int)uTime[j])192 {193 m = (int)uTime[j];194 l = (int)uTime[j - 1];195 break;196 }197 }198 //如果权值大于max 则记录新的权值和索引

199 if (Math.Abs(m - (int)nTime[p]) * Math.Abs((int)nTime[p] - l) >max)200 {201 max = Math.Abs(m - (int)nTime[p]) * Math.Abs((int)nTime[p] -l);202 index =p;203 }204 }205 //返回权值最大的时间片id

206 return (int)nTime[index];207 }208 }209

210

211 ///

212 ///检测授课id是否有变动213 ///

214 /// 授课表

215 /// 是否有变动

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值