码迷,mamicode.com
首页 > 编程语言 > 详细

循环赛日程表(Java实现)

时间:2017-04-25 13:29:41      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:ret   思路   length   解题思路   执行   循环   设计   log   结束   

 1 /**
 2  * 循环赛日程表:有n = 2^k个运动员要进行网球循环赛
 3  * 赛程表满足:
 4  * 每个选手必须与其他n-1个选手各赛一次
 5  * 每个选手一天只能参赛一次
 6  * 循环赛在n-1天内结束
 7  * 
 8  * 解题思路:
 9  * 将比赛日程表设计成一个n行和n-1列的表,第i行,第j列分别填入第i个选手在第j天所遇到的选手
10  * 栗子:
11  * 4个选手
12  * ---------
13  * |1|2|3|4|
14  * ---------
15  * |2|1|4|3|
16  * ---------
17  * |3|4|1|2|
18  * ---------
19  * |4|3|2|1|
20  * ---------
21  * 分治思想:将所有区域看成四块,区域1:(0,i) 区域2:(0,r+i) 区域3:(r,i) 区域4:(r,r+i)
22  *  递归执行的是区域1拷贝到区域4,区域2拷贝到区域3
23  * ---------
24  * | 1 | 2 |
25  * ---------
26  * | 3 | 4 |
27  * ---------
28  *  * @author 焦含寒
29  *
30  */
31 public class Roundrobin {
32     public static int[][] table(int k){
33         int n = 1<<k;
34         int[][] a = new int[n][n];
35         //构造赛程表第一行数据
36         for(int i = 0; i<n;i++)
37             a[0][i] = i+1;
38         //采用分治算法,构造整个赛程表
39         for(int r = 1;r<n;r<<=1){
40             for(int i =0;i<n;i += 2*r){
41                 copy(a,r,r+i,0,i,r);
42                 copy(a,r,i,0,r+i,r);
43             }
44         }
45         return a;
46     }
47     
48     private static void copy(int[][] a, int tox, int toy, 
49             int fromx, int fromy, int r){
50         for(int i =0;i<r;i++){
51             for(int j = 0;j<r;j++){
52                 a[tox+i][toy+j] = a[fromx+i][fromy+j];
53             }
54         }
55         
56     }
57         
58     
59     
60     public static void main(String[] args) {
61 
62         int[][] a = table(4);
63         for(int i=0;i<a.length;i++){
64             for(int j = 0;j<a[0].length;j++){
65                 System.out.print(a[i][j] + "ss ");
66             }
67             System.out.println();
68         }
69 
70     }
71 
72 }

 

循环赛日程表(Java实现)

标签:ret   思路   length   解题思路   执行   循环   设计   log   结束   

原文地址:http://www.cnblogs.com/jiaohanhan/p/6761095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!