N=4k
个玩家,k
张桌子和若干个团队,每个成员只能属于一个团队。一个团队最多可以包含k
个玩家。
我们想要组织3轮游戏,使得对于每张恰好容纳4个玩家的桌子,没有两个坐在那里的玩家属于同一个团队,并且对于后面的回合,没有两个坐在那里的玩家之前曾经坐过同一张桌子。所有玩家都会参加所有回合。
如果N
可能大约为~80
,我们如何有效地做到这一点呢?
我想到了这个:
for each table T:
repeat until 4 players have been seated at T:
pick a random player X that is not currently seated anywhere
if X has not sat at the same table as anyone currently at T AND
X is not from the same clan as anyone currently at T
seat X at T
break
我不确定这个程序是否总是能够完成,即使有有效的赋值也可能会卡住。即使这个方法可行,是否还有更好的方法?
k
是一个变量,它是桌子数量的4倍。 - IVlad