我正在编写一个程序,其中我需要洗牌的人名单,并将他们与其他人从名单。但问题是奇数,因为一个人可以和他们自己联系起来。(我让这一切变得不可能,所以什么也没发生。)
例如,如果有三个人叫“比尔”、“约翰”和“乔纳斯”。如果“比尔”得到“乔纳斯”和“乔纳斯”得到“比尔”,那么“约翰”就和“约翰”联系在一起,但我让这一切变得不可能(让他们自己),所以没有发生任何事情。
有人知道我怎么解决这个问题吗?
发布于 2020-08-18 21:04:39
这本质上是一个“神秘圣诞老人”的问题。这方面有一个简单的算法:
这保证是一个随机链接,并保证没有人与他们自己联系。
请注意,这并不是真正的随机,因为没有子组的人是相互联系的。从任何一个人开始,你将能够跟随链接和联系到每一个其他人。如果我没记错的话,我认为在随机链接中,大约有三分之一的时间是无法从另一个子组到达的。然而,这种形式的洗牌和链接应该足以满足您的目的。
发布于 2020-08-18 21:07:54
将人按随机顺序排列,例如使用随机播放,然后将person I分配给person i+1,最后分配给person i+1。没有人会得到它自己。
https://stackoverflow.com/questions/63476535
复制相似问题