在java实现循环比赛日程的程序中,主要运用的思想就是分治法。
分治法:通俗的理解就是在实际需要解决的问题当中,将大的问题分成小的问题,逐次分割,直到达到容易解决的范围。然后再将分割的小域的解按一定规律组合在一起成为“母”解,也就是这个大问题的解。
设有n=2*k个运动员要进行网球循环赛。先要设计一个满足一下要求的比赛日程:
(1)每个选手必须与其他n-1个选手各比赛一次
(2)每个选手一天只能比赛一次
(3)循环赛一天进行n-1天
按照这个要求可将比赛日程设计成n行和n-1列的一个表,在表的第1列放的是选手的编号其余列存放的是对应的比赛对手。按照分治策略,我们将所有对手设计成两组,n个选手的比赛日程表就可以通过n/2个选手设计的比赛日程来决定。递归的用这种一分为二的策略对选手进行分割,直到只剩下2个选手时,比赛日程的指定就变得简单。
public class recursion3 {
final static int m=16; //定义参加比赛运动员的编号
public static int a[][]=new int[m][m];
public static void main(String[] args)
{
int i,j;
recursion(1,m); //将参数传给递归函数
for(i=0;i
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 7 |
3 | 4 | 1 | 2 | 7 | 8 | 5 | 6 |
4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 |
5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 |
6 | 5 | 8 | 7 | 2 | 1 | 4 | 3 |
7 | 8 | 5 | 6 | 3 | 4 | 1 | 2 |
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |