……单循环赛赛程安排算法,很经典的算法了,这属于非2n的情况
要求所有参加比赛的队伍均能相遇一次,最后按各队在全部比赛中的积分、得失分率排列名次。这种竞赛方法满足(假设有n支队伍):
a、每支队伍必须与其他n-1支队伍各赛一次;
b、每支队伍每轮只能进行一场比赛。当 n为奇数时,需进行n轮比赛;
(1)当比参赛队为奇数即n=2*k-1 (n≥2)时,考虑到每轮均有一支队伍轮空,先将队伍一分为二,每轮比赛在前后两部分中依次选取一支队伍进行比赛,第一轮将k号选手轮空,利用对称性,将1号队伍和n号队伍比赛,2号队伍和n-1号队伍比赛,依此类推排完第一轮选手的比赛;第二轮将k+1号队伍轮空,再将2号队伍和1号队伍比赛,3号队伍和n号队伍比赛,依此类推排完第二轮选手的比赛;为了避免两个队之间出现重复比赛,所以用循环队列(如图1)的方式解决每轮轮空队伍的编号,即编号为n的队伍轮空的下一轮为编号1的队伍轮空。
最后具体的排发是:
第一轮 1-7 2-6 3-5
第二轮 2-1 3-7 4-6
第三轮 3-2 4-1 5-7
第四轮 4-3 5-2 6-1
第五轮 5-4 6-3 7-2
第六轮 6-5 7-4 1-3
第七轮 7-6 1-5 2-4
然后排名就可以了。
这是我程序学习资料的一部分,未运用到实际中,仅供参考- -