循环赛日程表算法
2012-03-11 14:56
295 查看
/* * 设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: * 每个选手必须与其他n-1个选手各赛一次; * 每个选手一天只能参赛一次; * 循环赛在n-1天内结束。 * 数组a[i][j]第i个选手在第j天所遇到的选手。 */ public class Calendar { public static void calen(int k, int a[][]) { // 有n=2^k个人参加比赛 // 定义一个空的二维数组 int n = 1, i, j, s; for (int m = 1; m <= k; m++) n = 2 * n; for (i = 1; i <= n; i++) a[1][i] = i; int m = 1;// m用来控制每一次填充数组时的起始位置 // 将这n个人两个两个分为一组,共分为k组,用分治法解决两个人的分配问题, //然后再解决四个人的问题...... for (s = 1;s <= k; s++) //第一次循环求出两个人的比赛结果,第二次循环求出 { //四个人的比赛结果,所以第k次循环求出2^k个人的比赛结果 n/=2; for(int t=1;t<=n;t++) { for(i=m+1;i<=2*m;i++) { for(j=m+1;j<=2*m;j++) { a[i][j+(t-1)*m*2]=a[i-m][j+(t-1)*m*2-m]; a[i][j+(t-1)*m*2-m]=a[i-m][j+(t-1)*m*2]; } } } m*=2; } } public static void main(String[] args) { int k=3,n=1; for(int i=1;i<=k;i++) n*=2; int a[][]=new int[n+1][n+1]; calen(3,a); System.out.println(a[7][8]); } }
相关文章推荐
- 算法练习-NOJ-1243-循环赛日程表
- 算法分析思维分析,以循环赛日程表为例
- 循环赛日程表(计算机算法设计与分析 --王晓东) 2.11
- 算法之循环赛日程表
- [算法]循环赛日程表
- 关于循环赛日程表算法的研究
- JAVA代码—算法基础:循环赛日程表
- [算法之分治法应用] 循环赛日程表
- 【算法-分治策略应用】循环赛日程表问题
- C++循环赛日程表算法
- 循环赛日程表(用来说明算法导论上的题目!!)
- 算法分析与设计-04-循环赛日程表算法
- 循环赛日程表算法
- 循环赛日程表算法
- 经典算法学习-循坏赛日程表-分治|递推|压位lowbit
- 循环赛日程表(分治)
- 循环赛日程表
- “循环赛日程安排”问题的分而治之解决算法
- 循环赛日程表
- 循环赛日程表(非递归)