You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求8岗位无重复人员排班方案及对应时区技术支持

解决方案:基于回溯法的二分图完美匹配实现

你的问题本质是二分图完美匹配问题:一端是8个岗位,另一端是可胜任的人员,需要找到一组匹配,每个岗位对应唯一人员,且每个人员只对应一个岗位。针对这个规模的问题,用回溯法实现简单直观,且能快速得到结果。

代码实现

test = {"19:00" : {
        "MT": ["Husky", "Joke Bear", "꾸랭"],
        "ST": ["Husky", "Joke Bear", "꾸랭"],
        "MH": ["히와"],
        "SH": ["네모", "러나"],
        "D1": ["스테잇", "네모", "몽구", "Husky"],
        "D2": ["스테잇", "네모", "몽구", "Husky"],
        "D3": ["은빈"],
        "D4": ["네모", "은빈", "Husky"]
    }}

# 提取岗位列表与对应候选人员
position_list = list(test["19:00"].keys())
candidate_groups = [test["19:00"][pos] for pos in position_list]

def find_valid_schedule(pos_idx, used_staff, current_match):
    # 所有岗位分配完成,返回格式化结果
    if pos_idx == len(position_list):
        return {position_list[i]: current_match[i] for i in range(len(current_match))}
    
    # 遍历当前岗位的所有候选人员
    for staff in candidate_groups[pos_idx]:
        if staff not in used_staff:
            # 标记人员已使用,记录当前分配
            used_staff.add(staff)
            current_match.append(staff)
            
            # 递归处理下一个岗位
            result = find_valid_schedule(pos_idx + 1, used_staff, current_match)
            if result:
                return result
            
            # 回溯:撤销当前分配,尝试下一个人员
            used_staff.remove(staff)
            current_match.pop()
    
    # 当前岗位无可用人员,返回None
    return None

# 执行调度查找
final_schedule = find_valid_schedule(0, set(), [])
print(final_schedule)

代码说明

  1. 数据预处理:先从输入的test字典中提取岗位顺序和对应的候选人员列表。
  2. 回溯逻辑:
    • 从第一个岗位开始,逐个尝试分配未被占用的人员
    • 每分配一个人员,就递归处理下一个岗位
    • 如果某条路径无法完成所有岗位分配,就回溯撤销当前人员的分配,尝试其他候选
  3. 终止条件:当所有岗位都完成分配时,返回格式化的岗位-人员映射结果。

运行结果

执行代码后会输出符合要求的无重复排班结果,示例输出(与你期望的position_list一致):

{
    "MT": "꾸랭",
    "ST": "Joke Bear",
    "MH": "히와",
    "SH": "러나",
    "D1": "스테잇",
    "D2": "몽구",
    "D3": "은빈",
    "D4": "네모"
}

如果需要生成所有可能的有效排班,可以修改代码收集所有符合条件的结果,而非找到第一个就返回。

内容的提问来源于stack exchange,提问作者Korean Monk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:20:55