以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 排班(遍历)方法思路求教 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=114803) |
||||
-- 作者:一笑 -- 发布时间:2018/2/22 21:34:00 -- 排班(遍历)方法思路求教 想做了一个排班系统,如下图所示: 从候选人中选取1名作为每一组的司机,每组司机不能相同,比如第1组选定张三后,其他组都不能选取。想用遍历的方法选出5组司机,并计算总共有多少种可能性,比如:1. 张三2李四3王二4刘备5孙子;1. 李四2张三3王二4刘备5孙子;请教一下代码的思路,菜鸟,谢谢!
|
||||
-- 作者:有点甜 -- 发布时间:2018/2/22 22:05:00 -- 如果层数是固定的,建议直接写多层循环,否则,就需要写成递归。下面代码,是三层的,看懂代码
Dim dt As DataTable = DataTables("表A") |
||||
-- 作者:一笑 -- 发布时间:2018/2/23 11:15:00 -- 谢谢,代码看懂了。层数不固定,能不能请教一下递归代码,谢谢 |
||||
-- 作者:有点甜 -- 发布时间:2018/2/23 11:36:00 -- loop函数
Dim drs = args(0)
调用代码
Dim dt As DataTable = DataTables("表A") |
||||
-- 作者:一笑 -- 发布时间:2018/2/24 11:00:00 -- 能给每个字符串前加个序号(多少种可能性)吗?谢谢 |
||||
-- 作者:有点蓝 -- 发布时间:2018/2/24 11:23:00 -- 函数: Dim drs = args(0) Dim ls = args(1) Dim level = args(2) If level = drs.count Then output.show(vars("idx") & " - " & String.Join("|", ls.ToArray)) vars("idx") += 1 Else For Each s As String In drs(level)("第二列").split(",") Dim iscontains = False For i As Integer = 0 To level-1 If ls(i) = s Then iscontains = True Exit For End If Next If iscontains Then Continue For If ls.count < level+1 Then ls.add(s) Else ls(level) = s End If functions.Execute("loop", drs, ls, level+1) Next End If 调用 Dim dt As DataTable = DataTables("表A") Dim drs = dt.Select("第二列 is not null") Dim ls As new List(Of String) vars("idx") = 1 Functions.Execute("loop", drs, ls, 0) |
||||
-- 作者:一笑 -- 发布时间:2018/2/24 18:44:00 -- 代码运行正常,但计算量太大,层数稍多,系统就崩溃。想在找到一种可能性时就退出循环,如对结果不满意,再次启动,接着寻找下一种结果,求代码,谢谢 |
||||
-- 作者:有点甜 -- 发布时间:2018/2/25 9:39:00 -- 以下是引用一笑在2018/2/24 18:44:00的发言:
代码运行正常,但计算量太大,层数稍多,系统就崩溃。想在找到一种可能性时就退出循环,如对结果不满意,再次启动,接着寻找下一种结果,求代码,谢谢
你做个例子上来测试吧。
你可以做一个按钮,终止程序的。按钮代码
vars("结束") = true
然后其余代码改一下
Dim drs = args(0)
调用
Dim dt As DataTable = DataTables("表A")
Dim drs = dt.Select("第二列 is not null")
Dim ls As new List(Of String)
vars("idx") = 1
vars("结束") = false Functions.Execute("loop", drs, ls, 0)
[此贴子已经被作者于2018/2/25 10:02:38编辑过]
|
||||
-- 作者:小马甲 -- 发布时间:2018/2/25 9:57:00 -- 6+1 ? |
||||
-- 作者:一笑 -- 发布时间:2018/2/25 12:08:00 -- 代码可运行,但有以下问题: 1. 和设计思路不一样,需要每找到一种可能性就停止,点击“继续”,按钮再寻找下一种可能性。请指教,谢谢
[此贴子已经被作者于2018/2/25 22:46:04编辑过]
|