讨论/算法和数据结构/算法问题/
算法问题

假设有N个人组队打比赛,两两配对,每场比赛4个人
每次上场的人要满足3个条件,优先级依次为
每次上场的4个人必须是上场次数最少的4人
每个人的搭档必须是循环搭档,例如假设总共有4个人参加比赛,第一场1和2搭档,下一场1不能和2搭档(可选2/3/4搭档,顺序不限),1和剩下的所有人搭档之后可以接着循环。
对手尽量不能重复,假如第一场比赛1:2-3:4,那么下一场1和2参加的比赛的对手里边不能含有3和4,除非没有可选的对手
这3个条件的优先级是1>2>3
最好用PHP或者JavaScript实现,可以付费回答

展开讨论
共 1 个讨论

根据条件1来定,用heapq, 每个人都当作一个节点,[比赛次数,选手ID ,可选搭档,可选对手],类似拓扑排序,比一次,就从4人的搭档,对手集合删除。 空了就是一轮,重置满,比赛次数+1,再入队。条件三不是很明白,下一场 指不能连续遇到,还是一轮结束前都不能遇到?细节再改改…