首先,我要理解这个主题很复杂,并且可能没有一个简单的答案。如果这很容易,那么每个人都会这样做。话虽如此...

我被要求构建一个用于管理体育联赛的应用程序。除以下概念外,大多数概念都相当容易理解:如何生成没有重叠的比赛时间表(团队一次比赛2支球队),其中一个部门的球队两次踢球队,但在一支球队中踢球队其他部门一次,并确保日程表上没有空洞(每个团队每周参加一次)

现在,该过程是使用为实现此目的而构建的Rosetta Stone类型电子表格手动完成的,但它仅适用于为其设计的团队数量。我为30支球队,24支球队和28支球队做出了不同的选择。与其持续尝试重新调整翻译表,不如我想整理一下该逻辑并调整该过程。

有什么想法吗?

最佳答案

有一个非常简单的系统,例如象棋比赛称为循环赛。

这个想法是将玩家分成 table 的两边。其中一个玩家被指定为“集线器”(想要一个更好的词)。比赛开始时要让玩家面对面互相对抗。在第一个回合之后,除了集线器之外的所有人都向前移动一把椅子,然后切换白色/黑色(运动中的家/外)顺序。当球员们坐在原来的地方时,整个循环赛比赛就结束了。如果您想让每个人都玩两次,那就再做一次。

Wikipedia article及其实现细节。

在您的特殊情况下,我会尝试进行一次包括所有团队在内的循环赛。然后,您需要对每个分区进行一次相同的操作,并确保分区内的团队在家中一次又一次不在比赛中互相比赛,请从第一轮巡回赛中检查各队在该轮中的比赛方式。

不利的一面是,当然,您将在比赛结束之前就参加所有分区比赛(因为最后n-1场比赛是对分区内球队的比赛[n =分区球队的数量])。如果这是一个问题,您可以简单地将匹配项交换一下。

我实际上写了一个简单的Python脚本来执行此操作。它不需要很多代码行,并且产生了很好的结果。这将创建一个时间表,其中每个团队在各自部门中与每个团队进行两次对抗,然后与其他部门中的团队对抗一次。不能检查以确保同一支球队在家中彼此相遇两次。但是此代码应该对如何创建自己的调度代码有一个好主意。

#!/usr/bin/python

div1 = ["Lions", "Tigers", "Jaguars", "Cougars"]
div2 = ["Whales", "Sharks", "Piranhas", "Alligators"]
div3 = ["Cubs", "Kittens", "Puppies", "Calfs"]

def create_schedule(list):
    """ Create a schedule for the teams in the list and return it"""
    s = []

    if len(list) % 2 == 1: list = list + ["BYE"]

    for i in range(len(list)-1):

        mid = int(len(list) / 2)
        l1 = list[:mid]
        l2 = list[mid:]
        l2.reverse()

        # Switch sides after each round
        if(i % 2 == 1):
            s = s + [ zip(l1, l2) ]
        else:
            s = s + [ zip(l2, l1) ]

        list.insert(1, list.pop())

    return s


def main():
    for round in create_schedule(div1):
        for match in round:
            print match[0] + " - " + match[1]
    print
    for round in create_schedule(div2):
        for match in round:
            print match[0] + " - " + match[1]
    print
    for round in create_schedule(div3):
        for match in round:
            print match[0] + " - " + match[1]
    print
    for round in create_schedule(div1+div2+div3):
        for match in round:
            print match[0] + " - " + match[1]
        print

if __name__ == "__main__":
    main()

关于.net - 如何自动生成体育联赛时间表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1037057/

10-10 02:18