【分治法】解决循环赛问题(n分为奇数和偶数)

您所在的位置:网站首页 用matlab解决球队循环比赛 【分治法】解决循环赛问题(n分为奇数和偶数)

【分治法】解决循环赛问题(n分为奇数和偶数)

2024-07-12 02:10| 来源: 网络整理| 查看: 265

原文地址:https://ericpengshuai.github.io/suan-fa/cd0cd01e2295.html

例题 设有N个运动员要进行网球循环赛,设计一个满足以下要求的比赛日程表 (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能赛一次; (3)当n 是偶数,循环赛进行n-1简单天,当n是奇数,循环赛进行n天。

分析

1. 首先考虑简单问题(n = 2^k) 这个我先上一个图大家应该就可以明白: 相当于整体带入的数学思想 应该很容易想到分治法,有如下规律:对于任意一个正方形区域(包括4、16……个小方块)左上角和右下角相等,右上角和左下角相等(如果懒得看汉字就直接看上面几种颜色的方块吧) 然后这个代码也很容易:

非递归(k是2上面的次数) void SetTable(int **a, int k) { //初始化左上角数 a[0][0] = 1; a[0][1] = 2; a[1][0] = 2; a[1][1] = 1; //然后分治安排 for(int i = 2; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3