排班算法问题(求高手指教)

shmilytea1986 2012-06-27 05:20:01
已知有N个人参与值班,每人安排值班的天数不等,N个人的总值班天数为31天,求所有可能的排班情况。
例如:值班人员有A、B、C、D、E、F、G(A值班4天、B值班5天、C值班5天、D值班5天、E值班5天、F值班3天、G值班4天,4+5+5+5+5+3+4=31)。
求高手指教。
...全文
349 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ShaneLooLi 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
写 31 重循环……
[/Quote]

好吧,我负点责任。
写二重循环,外层循环是带标签的永久循环,里层循环的是日子。
做一个二维数组,用来记录已经排列的情况。第一维是日子,第二维尺度是 7 ,0 代表 A ,1 代表 B ……
开始生成排班可能之前,还需要准备二个数组。一个是排班记录数组,另一个是每一个人已排天数记录数组。
然后里层循环,第一天,看第一天的记录中,遍历已经排列情况记录数组对应日子的第二维, 0-6,看看哪个还没排,然后看看对应人的已排记录是不是已满。没满就排这个,记录在当前排班记录数组里,然后下一个日子。

没循环完成 31 天生成一个记录之后,将数组放在一个 List 里边,然后清空排班记录数组和每一个人已排天数记录数组,再来一遍。
直到第一个人无班可排,就整体退出。
ShaneLooLi 2012-06-29
  • 打赏
  • 举报
回复
写 31 重循环……
shmilytea1986 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
写 31 重循环……


好吧,我负点责任。
写二重循环,外层循环是带标签的永久循环,里层循环的是日子。
做一个二维数组,用来记录已经排列的情况。第一维是日子,第二维尺度是 7 ,0 代表 A ,1 代表 B ……
开始生成排班可能之前,还需要准备二个数组。一个是排班记录数组,另一个是每一个人已排天数记录数组。
然后里层循环,第一天,看第一天的记录中,遍历已……
[/Quote]
谢谢你的详细回复,可能自己把问题描述的不够全面,实际比这个复杂N倍
shmilytea1986 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
给出全部约束条件吧,最没有效率的就是穷举了
[/Quote]
就是想穷举啊 然后再根据条件删除不符合的
flyhorse999 2012-06-27
  • 打赏
  • 举报
回复
给出全部约束条件吧,最没有效率的就是穷举了
shmilytea1986 2012-06-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
这个用计算机语言跑一遍就出来 了.
[/Quote]
就是不清楚跑的方法怎么设计
朗晴 2012-06-27
  • 打赏
  • 举报
回复
这个用计算机语言跑一遍就出来 了.

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧