Foxtable(狐表)用户栏目专家坐堂 → [求助]排课间隔问题思路求解


  共有2009人关注过本帖树形打印复制链接

主题:[求助]排课间隔问题思路求解

帅哥哟,离线,有人找我吗?
pcxjxjhkw
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1791 积分:12764 威望:0 精华:1 注册:2013/7/18 15:51:00
[求助]排课间隔问题思路求解  发帖心情 Post By:2016/4/6 22:06:00 [只看该作者]

主题:排课间隔
问题描述:一周上5天课,星期一至星期五。A学科每周3节课,将3节课排到星期一至星期五,达到较为均匀(不能出现连续三天上完了,其它时间就没该课)
可能出现的限制条件:能排A课的可能只有4天,如星期一,其他课已排完了。
基本思路:能排A学科的星期集合(可能为5天,也可能为4天)——》排第1节——》排第2节——》排第3节
达到的效果:3节课中至少其中两节课间隔1天。


研究了很久,一直没找到一个好的思路,在此求助大家,谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/6 22:26:00 [只看该作者]

 说一个偷懒的方法,类似洗牌的,随机洗乱,然后看看是否合理,然后微调,不行就再洗一次。

 

 

Dim cnt As Integer = Tables("表A").Rows.Count
Dim ids(cnt - 1) As Integer
For i As Integer = 0 To cnt -1
    ids(i) = i
Next
For i As Integer = 1 To cnt  '洗牌次数
    Dim id1 As Integer = rand.Next(0,cnt)
    Dim id2 As Integer = rand.Next(0,cnt)
    Dim vid As Integer = ids(id1)
    ids(id1) = ids(id2)
    ids(id2) = vid
Next

For i As Integer = 0 To cnt -1
    output.show(Tables("表A").rows(ids(i))("第一列"))
Next


 回到顶部
帅哥哟,离线,有人找我吗?
pcxjxjhkw
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1791 积分:12764 威望:0 精华:1 注册:2013/7/18 15:51:00
  发帖心情 Post By:2016/4/6 22:33:00 [只看该作者]

还有其他思路吗?

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/4/6 22:34:00 [只看该作者]

 没有。

 回到顶部